我已经声明了一个我想要操作的元组列表。我有一个返回用户选项的函数。我想看看用户是否输入了“A”、“W”、“K”键中的任何一个。有了字典,我会这样说:while option not in author.items() option = get_option()
. 如何使用元组列表完成此操作?
authors = [('A', "Aho"), ('W', "Weinberger"), ('K', "Kernighan")]
我已经声明了一个我想要操作的元组列表。我有一个返回用户选项的函数。我想看看用户是否输入了“A”、“W”、“K”键中的任何一个。有了字典,我会这样说:while option not in author.items() option = get_option()
. 如何使用元组列表完成此操作?
authors = [('A', "Aho"), ('W', "Weinberger"), ('K', "Kernighan")]
authors = [('A', "Aho"), ('W', "Weinberger"), ('K', "Kernighan")]
option = get_option()
while option not in (x[0] for x in authors):
option = get_option()
这是如何工作的:
(x[0] for x in authors)
是一个生成器表达式,这会[0]th
从作者列表中一个一个地产生每个项目的元素,然后将该元素与option
. 一旦找到匹配,它就会短路并退出。
生成器表达式一次生成一项,因此内存效率很高。
这里有很好的答案,涵盖了使用 进行此操作zip
,但您不必那样做- 您可以使用 anOrderedDict
来代替。
from collections import OrderedDict
authors = OrderedDict([('A', "Aho"), ('W', "Weinberger"), ('K', "Kernighan")])
由于它会记住它的输入顺序,因此您可以对其进行迭代,而不必担心您的键会出现奇怪或不寻常的顺序。