私がリストを持っているとしましょう:
l = [0, 1, 2, 3]
リストから各アイテムとその補足を取得して、リストを反復処理するにはどうすればよいですか?あれは、
for item, others in ...
print(item, others)
印刷します
0 [1, 2, 3]
1 [0, 2, 3]
2 [0, 1, 3]
3 [0, 1, 2]
理想的には、理解に使える簡潔な表現を探しています。
私がリストを持っているとしましょう:
l = [0, 1, 2, 3]
リストから各アイテムとその補足を取得して、リストを反復処理するにはどうすればよいですか?あれは、
for item, others in ...
print(item, others)
印刷します
0 [1, 2, 3]
1 [0, 2, 3]
2 [0, 1, 3]
3 [0, 1, 2]
理想的には、理解に使える簡潔な表現を探しています。
これは非常に簡単で理解しやすいです。
for index, item in enumerate(l):
others = l[:index] + l[index+1:]
あなたが主張するならば、あなたはこれからイテレータを作ることができます:
def iter_with_others(l):
for index, item in enumerate(l):
yield item, l[:index] + l[index+1:]
使用法を与える:
for item, others in iter_with_others(l):
print(item, others)
私自身の質問に答えるitertools.combinations
と、結果が辞書順に発行されるという事実を利用して使用することができます。
from itertools import combinations
zip(l, combinations(reversed(l), len(l) - 1))
ただし、これはかなりあいまいです。nightcracker のソリューションは、読者にとって非常に理解しやすいものです。
どうですか
>>> [(i, [j for j in L if j != i]) for i in L]
[(0, [1, 2, 3]), (1, [0, 2, 3]), (2, [0, 1, 3]), (3, [0, 1, 2])]
OK、それは無数のテストであり、@nightcrackerのソリューションはおそらくより効率的ですが、ええと...