我想知道如何迭代包含python中的列表的列表,但是我想使用使用索引的for循环方法而不是迭代python中的常规方法。有可能这样做吗?
这是python代码:
n = [[1, 2, 3], [4, 5, 6, 7, 8, 9]]
def flatten(my_lists):
results = []
for outer in range(len(my_lists)):
for inner in range(len(outer)):
results.append(lists[outer][inner])
return results
print flatten(n)
这是我在控制台中遇到的错误:
Traceback (most recent call last):
File "python", line 10, in <module>
File "python", line 6, in flatten
TypeError: object of type 'int' has no len()
我的代码中出现了什么错误?
提前感谢。
答案 0 :(得分:3)
outer
和inner
都是ints
。因此,len(outer)
必然会失败:
results = []
for outer in range(len(my_lists)):
# you need the length of the list in position 'outer', not of 'outer' itself
for inner in range(len(my_lists[outer])):
results.append(my_lists[outer][inner])
return results
根本不使用索引更容易:
results = []
for lst in my_lists:
for x in lst:
results.append(x)
# Or without inner loop
# results.extend(lst)
return results
此外,为了展平列表列表,有许多记录良好的方法,直接的方法是嵌套理解,如:
n = [[1, 2, 3], [4, 5, 6, 7, 8, 9]]
flat = [x for lst in n for x in lst]
# [1, 2, 3, 4, 5, 6, 7, 8, 9]
有关详情,请参阅Making a flat list out of list of lists in Python和Flatten (an irregular) list of lists。
答案 1 :(得分:0)
这里的索引循环使用枚举。
n = [[8, 2, 3], [4, 5, 6, 7, 8, 9]]
def flatten(my_lists):
results = []
for idx, outer in enumerate(my_lists):
for idx2, inner in enumerate(outer):
results.append(my_lists[idx][idx2])
return results
print flatten(n)
idx和idx2是for循环的当前索引
答案 2 :(得分:0)
除了其他答案之外,还有使用itertools
的标准库解决方案。
>>> import itertools
>>> n = [[1, 2, 3], [4, 5, 6, 7, 8, 9]]
>>> print(list(itertools.chain(*n)))
[1, 2, 3, 4, 5, 6, 7, 8, 9]
或(可能)更明确地
>>> from itertools import chain
>>> n = [[1, 2, 3], [4, 5, 6, 7, 8, 9]]
>>> print(list(chain.from_iterable(n)))
[1, 2, 3, 4, 5, 6, 7, 8, 9]
如果你只需要扁平的列表&#39;要进行迭代,您可以省略list
调用并使用返回的itertools.chain
对象。
>>> chain.from_iterable(n)
<itertools.chain object at 0x7f2ecc05f668>