如何遍历包含python中列表的列表?

时间:2018-01-02 09:07:29

标签: python list loops

我想知道如何迭代包含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()

我的代码中出现了什么错误?

提前感谢。

3 个答案:

答案 0 :(得分:3)

outerinner都是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 PythonFlatten (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>