2012-04-30 103 views
1

我有一個列表,它包含列表。內部列表可能是空的。這是結構:「for-in循環」的學習索引

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

我的代碼:

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

輸出是:

abcd 

我所要的輸出是:

2a2b4c5d 

的數字是指標的內部列表。有沒有快速的方法來做到這一點?

+1

你需要引用內部列表項,除非它們確實是變量。此外,名單也是一個糟糕的選擇。 – Spaceghost

+0

是的,有報價。在寫這裏的時候我只是忘了。 – Rckt

回答

8

請注意,您不應該使用list作爲變量名稱,因爲它shadows內置list類型。

>>> 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()計數爲零。你可以指定雖然第二個參數作爲開始,到基於一個預期輸出相匹配:

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


2 a 
2 b 
4 c 
5 d 

,但只有這樣做,如果neccessary,從零開始按照慣例蟒蛇計數。

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