2012-04-30 73 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))