看起来像这样有点复杂,但我想要的应该很简单。 我有一个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
知道为什么这会阻塞吗?
回溯只是说那里有语法错误......
重新编辑:我通过使用其他数据结构解决了我的问题。这有点过于复杂。很抱歉浪费你的时间,但感谢您的提示!
答案 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)