繁体   English   中英

python - 迭代元组列表的子集

[英]python - iterating over a subset of a list of tuples

让我们说我有一个元组列表如下

l = [(4,1), (5,1), (3,2), (7,1), (6,0)]

我想迭代元组中第二个元素为1的项目?

我可以在循环中使用if条件来做到这一点,但是我希望有一个更好的pythonic方式吗?

谢谢

您可以使用列表理解:

[ x for x in l if x[1] == 1 ]

您也可以使用生成器语法迭代元组:

for tup in ( x for x in l if x[1] == 1 ):
    ...

怎么样

ones = [(x, y) for x, y in l if y == 1]

要么

ones = filter(lambda x: x[1] == 1, l)

只需使用if 这很简单明了。

for x, y in tuples:
    if y == 1:
        do_whatever_with(x)

在上面构建一个生成器:

has_1 = (tup for tup in l if l[1] == 1)
for item in has_1:
    pass
for e in filter(l, lambda x: x[1] == 1):
    print e

试试这个,使用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)

由于你想迭代, itertools.ifilter是一个很好的解决方案:

from itertools import ifilter
iter = ifilter(lambda x: x[1] == 1, l)
for item in iter:
    pass

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM