假设我有一个元组列表,如下所示
l = [(4,1), (5,1), (3,2), (7,1), (6,0)]
我想迭代元组中第二个元素为1的项目?
我可以在循环中使用if条件来完成它,但是我希望有一个更好的 pythonic 方式吗?
由于
答案 0 :(得分:6)
您可以使用列表理解:
[ x for x in l if x[1] == 1 ]
您也可以使用生成器语法迭代元组:
for tup in ( x for x in l if x[1] == 1 ):
...
答案 1 :(得分:3)
怎么样
ones = [(x, y) for x, y in l if y == 1]
或
ones = filter(lambda x: x[1] == 1, l)
答案 2 :(得分:3)
只需使用if
即可。这很简单。
for x, y in tuples:
if y == 1:
do_whatever_with(x)
答案 3 :(得分:2)
在它上面构建一个生成器:
has_1 = (tup for tup in l if l[1] == 1)
for item in has_1:
pass
答案 4 :(得分:2)
for e in filter(l, lambda x: x[1] == 1):
print e
答案 5 :(得分:1)
试试这个,使用list comprehensions是解决问题的pythonic方法:
lst = [(4,1), (5,1), (3,2), (7,1), (6,0)]
[(x, y) for x, y in lst if y == 1]
=> [(4, 1), (5, 1), (7, 1)]
注意我们如何使用元组解包x, y
来获取对中的每个元素,以及条件if y == 1
如何仅筛选出第二个元素中值为1
的元素(x, y)
这对。在那之后,你可以用找到的元素做任何你想做的事情,特别是,我正在重建左边这部分的原始对:{{1}}
答案 6 :(得分:1)
由于你想要迭代,itertools.ifilter
是一个很好的解决方案:
from itertools import ifilter
iter = ifilter(lambda x: x[1] == 1, l)
for item in iter:
pass