2013-06-18 50 views
-3

假設我有一個包含5個元素x=[a,b,c,d,e]的列表,我想運行一個for循環,打印所有列表,其中兩個條目比原始列表中的對應條目少1。for循環中的Python更改列表元素

什麼是在Python中做到這一點的簡單方法?提前致謝。

編輯:如果x=[4,5,6,7,8]我想:

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

所以,你會想'[A-1 ,b-1,c,d,e]','[a-1,b,c-1,d,e]','[a-1,b,c,d-1,e]'等? –

+0

問題沒有任何意義,原始列表是什麼?列表是否包含ascii字符或數字或什麼?請張貼輸入和期望的輸出。 –

+0

a,b,c ..是列表嗎? –

回答

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