Python - 从元组列表输入

时间:2013-06-19 23:43:51

标签: python

我已经宣布了一个我想操纵的元组列表。我有一个函数返回用户的选项。我想看看用户是否输入了任何一个键'A','W','K'。有了字典,我会说:while option not in author.items() option = get_option()。如何使用元组列表完成此操作?

authors = [('A', "Aho"), ('W', "Weinberger"), ('K', "Kernighan")]

3 个答案:

答案 0 :(得分:2)

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匹配。一旦发现匹配,它就会短路并退出。

生成器表达式一次产生一个项目,因此内存效率也很高。

答案 1 :(得分:1)

这样的东西
option in zip(*authors)[0]

我们正在使用zip来基本上将字母与单词分开。然而,由于我们正在处理元组的列表,我们必须unpack使用*

>>> zip(*authors)
[('A', 'W', 'K'), ('Aho', 'Weinberger', 'Kernighan')]
>>> zip(*authors)[0]
('A', 'W', 'K')

然后,我们只需使用option in来测试zip(*authors)[0]中是否包含选项。

答案 2 :(得分:0)

这里有很好的答案,涵盖了使用zip执行此操作,但您没有 这样做 - 您可以使用OrderedDict代替。

from collections import OrderedDict
authors = OrderedDict([('A', "Aho"), ('W', "Weinberger"), ('K', "Kernighan")])

由于它会记住它的输入顺序,你可以迭代它,而不必担心键的奇怪或异常排序。