在Python中访问列表列表的每个列表的内容

时间:2011-06-17 15:03:51

标签: python list loops

看起来像这样有点复杂,但我想要的应该很简单。 我有一个Python列表。

让我们说list = [[A, B, C], [D, B], [E], [X, Y, Z]]

我希望按照特定顺序迭代每个内部列表的元素 我试过了

for i in range(0, 10):
    for item in list[i]:
        <do action on item>

但我从Python指向list[i]时遇到语法错误,似乎不太喜欢它。

编辑:我想一次遍历一个内部列表 例如:

for i in range(0, 1):
    print i
    for item in list[i] #or something that works..
        print item

会打印

0
A
B
C
1
D
B

知道为什么这会阻塞吗?

回溯只是说那里有语法错误......

重新编辑:我通过使用其他数据结构解决了我的问题。这有点过于复杂。很抱歉浪费你的时间,但感谢您的提示!

6 个答案:

答案 0 :(得分:5)

这是因为你的外部列表只有4个元素,因此没有索引4(或5或6等)。这就是您收到索引错误的原因。

这与此类似:

  
    
      

L = [1,2,3]       L [6] #L没有第6个索引           Traceback(最近一次调用最后一次):             文件“”,第1行,in           IndexError:列表索引超出范围

    
  

你应该做什么,是这样的:

for sub_list in L:
    for item in sub_list:
        <do action on item>

回复您的修改:

注意,不要将类型用作变量名。所以不要打电话给你的清单。也许这就是一些不喜欢的地方。

如果错误是“类型不可订阅”的结果,那么这就是您收到错误的原因。您可以通过将list的名称更改为其他内容来修复此问题 - 我建议L

答案 1 :(得分:3)

您在寻找

吗?
for my_list in list_of_lists:
    for item in my_list:
        # whatever

答案 2 :(得分:2)

你想要的是链接子列表并迭代。 Itertools模块具有执行此操作的功能,并且非常简单和高效:

for item in itertools.chain.from_iterable(list_of_lists):
   <do action on item>

答案 3 :(得分:2)

也许你得到一个错误,因为你使用了范围(0,10)但你的列表没有10个条目?

l = [['a', 'b', 'c'], ['d', 'b'], ['e'], ['x', 'y', 'z']]
for i in range (0,len(l)):
    for item in l[i]:
        print item

a
b
c
d
b
e
x
y
z

答案 4 :(得分:0)

您的错误可能与i大于内部列表的数量有关。为避免这种情况,您可以使用

for inner in list:
    for item in inner:
        <do action on item>

答案 5 :(得分:0)

你也可以使用这样的东西:

l = [['a', 'b', 'c'], ['d', 'b'], ['e'], ['x', 'y', 'z']]
[val for row in l for val in row]

或者如果您需要执行任何操作:

for val in (val for row in l for val in row):
    # do smth

OR:

action = lambda x: str(x)+'_1'
[map(lambda val: action(val), row) for row in l]

OR:

action = lambda x: str(x)+'_1'
map(lambda row: map(lambda val: action(val), row), l)