これを考える最も簡単な方法は、リストよりも1つ小さい長さのすべての組み合わせを繰り返したいということです。これを行うために、我々はitertools.combinations()
使用することができます。私たちに与え
import itertools
color = ["red","blue","red","green","blue"]
for rest in itertools.combinations(color, len(color)-1):
print(rest)
:
('red', 'blue', 'red', 'green')
('red', 'blue', 'red', 'blue')
('red', 'blue', 'green', 'blue')
('red', 'red', 'green', 'blue')
('blue', 'red', 'green', 'blue')
これは、それがシーケンスと同様、反復可能オブジェクト上で動作として、良い解決策では非常に読みやすい、そして素敵でなければなりませんそして速い。
combinations()
は予測可能な順序を示しているので、現在の値が必要な場合は、簡単に取得することもできます。したがって、同時に両方を繰り返し処理するだけです(zip()
と同時にitertools.izip()
Python 2.xの場合、zip()
は3.xのようなリストを生成します)。ここで
import itertools
color = ["red","blue","red","green","blue"]
for c, rest in zip(color, itertools.combinations(reversed(color), len(color)-1)):
print(c, rest)
red ('blue', 'green', 'red', 'blue')
blue ('blue', 'green', 'red', 'red')
red ('blue', 'green', 'blue', 'red')
green ('blue', 'red', 'blue', 'red')
blue ('green', 'red', 'blue', 'red')
私はそれが左から右に働くcomibinations()
の入力を逆に - あなたは左への権利を取得する代わりにzip()
でcolor
を逆にすることができます。
つまり、一言で言えば、それは1行の解決策です(インポートを数えれば2つです)。
list.pop()をお探しですか?リストから1つの項目を削除して返します。 –