假设我有一个名为majorPowers
的列表,其中包含以下两个列表:
axis=["germany","italy","japan"]
allies=["russia","uk","us"]
我想将这些列表的每个元素插入到新的 mega-list 中。我现在正在这样做:
>>> temp = []
>>> temp = [ww2.append(t) for t in majorPowers]
>>>ww2
[['germany','italy','japan'],['russia','uk','us']]
如何将其调整为不使用temp
并将单个元素插入ww2
而不是列表本身(axis
和allied
)。
此外,新的超级列表本身是否会被归类为综合列表或制作过程?
编辑:
请注意我不想这样做:
for a in list1:
for b in a:
c.append(b)
@美国洛特。我理解你的观点。然而,我正在尝试学习Python中的一些技巧,而不是我通常做的事情的标准方法。这只是为了让我更多地了解Python!
答案 0 :(得分:5)
你提出这个问题很好,因为滥用清单是不良形式
这样的理解。您显示的代码使用append
,而不是生成
temp
的元素,但由于其副作用。 避免列表中的副作用
推导强>!
所以,你可以做几件事。首先,你可以使用
itertools.chain
:
>>> from itertools import chain
>>> list(chain(*mayorPowers))
['germany', 'italy', 'japan', 'russia', 'uk', 'us']
您可以使用itertools.chain.from_iterable
代替将mayorPowers
的元素作为单个参数传递给chain
:
>>> list(chain.from_iterable(mayorPowers))
['germany', 'italy', 'japan', 'russia', 'uk', 'us']
或者您可以使用extend
:
>>> ww2 = []
>>> for mp in mayorPowers:
... ww2.extend(mp)
...
>>> ww2
['germany', 'italy', 'japan', 'russia', 'uk', 'us']
或sum
(我想最喜欢这个):
>>> sum(mayorPowers, [])
['germany', 'italy', 'japan', 'russia', 'uk', 'us']
或者,有点疯狂(使用functools.reduce
和operator.add
),
>>> from functools import reduce
>>> from operator import add
>>> reduce(add, mayorPowers)
['germany', 'italy', 'japan', 'russia', 'uk', 'us']
答案 1 :(得分:1)
from itertools import chain
ww2 = list(chain.from_iterable(majorPower))
答案 2 :(得分:0)
尝试扩展
for t in majorPowers: ww2.extend(t)
或
sum(majorPowers,[])
答案 3 :(得分:0)
我会使用reduce:
from operator import add
ww2 = reduce(add, majorPowers)