简体   繁体   中英

python - iterating over a subset of a list of tuples

Lets say I have a list of tuples as follows

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

I would like to iterate over the items where the 2nd element in the tuple is 1?

I can do it using an if condition in the loop, but I was hoping there will a be amore pythonic way of doing it?

Thanks

You can use a list comprehension:

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

You can iterate over tuples using generator syntax as well:

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

How about

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

or

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

Just use the if . It's clear and simple.

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

Build a generator over it:

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

Try this, using list comprehensions is the pythonic way to solve the problem:

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)]

Notice how we use tuple unpacking x, y to obtain each of the elements in the pair, and how the condition if y == 1 filters out only those element with value 1 in the second element of the pair. After that, you can do anything you want with the elements found, in particular, I'm reconstructing the original pair in this part at the left: (x, y)

Since you want to iterate, itertools.ifilter is a nice solution:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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