如何重置包含列表的变量以生成一个新的列表?

4

非常流行的答案,但我的答案与众不同。 我有一个列表:

s = [(1, 2, 3),
     (4, 5, 6),
     (7, 8, 9)]

我希望将我的多个内部列表合并成一个大列表,而不需要添加其他列表。 我需要它们变成字符串,所以我这样做:
[map(str, x) for x in s]

但是这样我得到的是[['1', '2', '3'], ['4', '5', '6'], ['7', '8', '9']]

所以我需要的是['1', '2', '3', '4', '5', '6', '7', '8', '9']


11
可能是将Python中的嵌套列表转换为平面列表的重复问题。 - ndmeiri
6个回答

2
你需要使用列表推导式进行扁平化处理:
print ([i for x in s for i in map(str, x)])
['1', '2', '3', '4', '5', '6', '7', '8', '9']

2
import itertools
s = [(1, 2, 3),
    (4, 5, 6),
    (7, 8, 9)]
print(list(map(str,itertools.chain(*s))))

1
您可以使用sumlist:
map(str, list(sum(s, ())))

1

使用嵌套的列表推导可能是最简单的方法

>>> [str(sii) for si in s for sii in si]
['1', '2', '3', '4', '5', '6', '7', '8', '9']

1
另一种选择是使用reduce将列表压平,并使用map将元素转换为字符串。
>>> from functools import reduce

>>> s = [(1, 2, 3), (4, 5, 6),(7, 8, 9)]
>>> list(map(str,reduce(lambda x,y: x+y,s)))
>>> ['1', '2', '3', '4', '5', '6', '7', '8', '9']

虽然简洁,但我发现在Python中,“reduce”比大多数其他更“冗长”的方法要慢得多。有人知道为什么吗? - Calvin Ku
@CalvinKu 这是您需要的链接:(https://dev59.com/IW035IYBdhLWcg3wZ_Qt#5436709) :) - Sohaib Farooqi

1

itertools.chain 对此非常方便:

from itertools import chain

s = [(1, 2, 3),
     (4, 5, 6),
     (7, 8, 9)]

list(map(str, chain.from_iterable(s)))

# ['1', '2', '3', '4', '5', '6', '7', '8', '9']

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接