0

我想让我的代码更 Pythonic。

有一个简单的列表列表,例如

numbers = [[1, 2], [3, 4, 5]]

我想做这个:

mylist = []
for sublist in numbers:
  for number in sublist:
      mylist.append(number)

但在一行中,使用一个全面的列表定义:

mylist = [ number for number in  sublist for sublist in numbers] 

但是我得到的结果是 [3, 3, 4, 4, 5, 5]

我究竟做错了什么?提前致谢!

4

2 回答 2

11

for 循环的顺序是错误的——应该是

mylist = [number for sublist in numbers for number in sublist]

反而。人们常常对此感到惊讶。只需使用与嵌套for循环中相同的顺序即可。

您可以使用的替代方法是

from itertools import chain

mylist = list(chain.from_iterable(numbers))
于 2012-08-09T21:55:55.147 回答
2

我个人发现嵌套列表推导难以阅读和理解。itertools标准库有一个方便的功能chain

chain(*iterables) --> chain object

返回一个链对象,其 .next() 方法从第一个可迭代对象返回元素,直到它用尽,然后从下一个可迭代对象返回元素,直到所有可迭代对象都用完。

所以你会这样做:

import itertools
mylist = list(itertools.chain(*numbers))
于 2012-08-09T22:00:21.647 回答