2012-04-30 4 views
1

목록이 있으며 목록이 있습니다. 내부 목록은 비어있을 수 있습니다. 이것은 구조 :"for-in loop"학습 색인

[[],[a,b],[],[c],[d]] 

내 코드 :

for inner in list: 
    for char in inner: 
     print char   # I want to add indexes of inner lists here 

출력은 다음과 같습니다

2a2b4c5d 

숫자는 인덱스 :

abcd 

내가 출력이되고 싶어 내부리스트의. 이 작업을 수행하는 빠른 방법이 있습니까?

+1

실제로 변수가 아니라면 내부 목록 항목 주위에 따옴표가 필요합니다. 또한 목록은 이름에 대한 좋지 않은 선택입니다. – Spaceghost

+0

예, 따옴표가 있습니다. 나는 여기서 글쓰기를하는 동안 잊어 버렸다. – Rckt

답변

8

list 형식을 형식으로 사용하므로 형식을 shadows 변수 이름으로 사용하지 마십시오.

>>> lst = [[],['a','b'],[],['c'],['d']] 
>>> for idx, inner in enumerate(lst): 
     for char in inner: 
     print idx, char 


1 a 
1 b 
3 c 
4 d 

당신은 enumerate()이 0부터 시작 함을 알 수 있습니다.

>>> for idx, inner in enumerate(lst, 1): 
    for char in inner: 
     print idx, char 


2 a 
2 b 
4 c 
5 d 

을하지만 않는이 켜지지, 파이썬 카운트 규칙에 따라 0 기반 경우 : 당신은 당신의 1부터 예상 출력과 일치하지만 시작으로 두 번째 인수를 지정할 수 있습니다.

+0

이름표를 상기시켜 주셔서 감사합니다. – Rckt

1
for i, inner in enumerate(myList): # just add an index variable here 
    for char in inner: 
     print i   # and use it wherever you need to 
     print char 
+2

이렇게하면 "ValueError : 포장을 풀기 위해 하나 이상의 값이 필요합니다"라고 표시됩니다. ch3ka의 대답에 표시된대로 열거 형을 사용해야합니다. – Spaceghost

+0

오류가 수정되었습니다. 감사합니다 @ Spaceghost! – dragon

1

이 작동합니다 :

for i in range(len(list)): 
    for char in list[i]: 
     print i+1 
     print char 

(세 개의 새로운 답변 등장이 o.O를 입력하는 동안)

2

가 정확히 출력을 얻으려면 한 가지 방법은 sys.stdout에 직접 작성하는 것입니다. 인쇄 명령 (2.x에서)은 결국 각 색인 + char 사이에 공백을 남겨 둡니다.

import sys 
for ndx, inner in enumerate([[],['a','b'],[],['c'],['d']], 1): 
    for char in inner: 
     sys.stdout.write('%d%s' % (ndx, char))