のリストのサブセットを反復処理は、私はタプルの第二の要素が1であるアイテムを反復したいのpython - タプル
l = [(4,1), (5,1), (3,2), (7,1), (6,0)]
を次のように私はタプルのリストを持っているとしましょう?
私はループのif条件を使用してそれを行うことができますが、私はそこにあることを願っていましたpythonicやり方?
おかげ
のリストのサブセットを反復処理は、私はタプルの第二の要素が1であるアイテムを反復したいのpython - タプル
l = [(4,1), (5,1), (3,2), (7,1), (6,0)]
を次のように私はタプルのリストを持っているとしましょう?
私はループのif条件を使用してそれを行うことができますが、私はそこにあることを願っていましたpythonicやり方?
おかげ
あなたはリストの内包表記を使用することができます。
[ x for x in l if x[1] == 1 ]
あなたにも発電機の構文を使用してタプルを反復処理することができます
for tup in (x for x in l if x[1] == 1):
...
そのgenexpは、同等の 'if'文よりも読みにくいです。これは悪い考えのようです。 – user2357112
どの程度
ones = [(x, y) for x, y in l if y == 1]
または
ones = filter(lambda x: x[1] == 1, l)
はlist comprehensionsを使用して、問題を解決するためのニシキヘビの方法で、これを試してみてください:
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
がそのペアの2番目の要素に値1
の要素のみをフィルタリングする方法。その後、あなたが見つかった要素で、あなたが欲しいものを行うことができ、特に、私は左でこの部分にオリジナルのペアを再構築しています:(x, y)
だけif
を使用しています。それは明確でシンプルです。
for x, y in tuples:
if y == 1:
do_whatever_with(x)
* "ループのif条件を使用して行うことができますが、それを行うためのもっと細かい方法があることを望んでいますか?" * – arshajii
これはPythonicのやり方です。ジェネレータとリスト内包は意図した目的には問題ありませんが、実際にはイテラブルを構築するのではなく、何かを反復する必要がある場合は、この方法があります。あなたは正直言って、genexpのループはより読みやすくなっていますか? – user2357112
それ以上の発電機をビルドします。
has_1 = (tup for tup in l if l[1] == 1)
for item in has_1:
pass
あなたが反復処理したいので、itertools.ifilter
が素敵なソリューションです:
from itertools import ifilter
iter = ifilter(lambda x: x[1] == 1, l)
for item in iter:
pass
これは、テストが 'if'節で簡単に捕捉できる素晴らしい解決策ではありません。 – Marcin
for e in filter(l, lambda x: x[1] == 1):
print e
うーん、自己への注意:使用することはありません '記号「l'(ell)」を意味する。同様に 'O'(Oh)。 –