-3

5 つの要素のリストがありx=[a,b,c,d,e]、for ループを実行して、エントリのうち 2 つが元のリストの対応するエントリよりも 1 少ないすべてのリストを出力するとします。

Pythonでこれを行う簡単な方法は何ですか? 前もって感謝します。

編集:必要x=[4,5,6,7,8]に応じて:

[3,4,6,7,8], [3,5,5,7,8], [3,5,6,6,8] etc.
4

2 に答える 2

2
from itertools import combinations
a = [1,2,3,4]
for combination in combinations(range(len(a)),r=2):
    print [c-(1 if i in combination else 0) for i,c in enumerate(a)]
于 2013-06-18T19:27:51.597 に答える
2

このようなもの:

>>> from itertools import combinations
>>> lis = [0,1,2,3,4]
>>> for x,y in combinations(range(len(lis)),2):
    l = lis[:]
    l[x] -= 1
    l[y] -= 1
    print l
...     
[-1, 0, 2, 3, 4]
[-1, 1, 1, 3, 4]
[-1, 1, 2, 2, 4]
[-1, 1, 2, 3, 3]
[0, 0, 1, 3, 4]
[0, 0, 2, 2, 4]
[0, 0, 2, 3, 3]
[0, 1, 1, 2, 4]
[0, 1, 1, 3, 3]
[0, 1, 2, 2, 3]

短いバージョン:

for x,y in combinations(range(len(lis)),2):
    print [item - 1 if i in (x,y) else item  for i,item in enumerate(lis)]
...     
[-1, 0, 2, 3, 4]
[-1, 1, 1, 3, 4]
[-1, 1, 2, 2, 4]
[-1, 1, 2, 3, 3]
[0, 0, 1, 3, 4]
[0, 0, 2, 2, 4]
[0, 0, 2, 3, 3]
[0, 1, 1, 2, 4]
[0, 1, 1, 3, 3]
[0, 1, 2, 2, 3]
于 2013-06-18T19:24:31.813 に答える