2013-06-18 4 views
-3

5 개 요소의 목록이 x=[a,b,c,d,e]이고 두 개의 항목이 원래 목록의 해당 항목보다 1 적은 모든 목록을 인쇄하는 for 루프를 실행한다고 가정 해 보겠습니다.for 루프의 파이썬 변경 목록 요소

파이썬에서이 작업을 수행하는 간단한 방법은 무엇입니까? 미리 감사드립니다.

편집 : 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 , [a-1, b, c, d-1, e] 등을 포함 할 수있다. ? –

+0

질문이 이해가되지 않습니다. 원래 목록은 무엇입니까? 목록에 아스키 문자 또는 숫자가 포함되어 있습니까? 입력 및 예상 출력을 게시하십시오. –

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