将列表元素添加到“Mega List”

时间:2009-11-19 10:49:11

标签: python list

假设我有一个名为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而不是列表本身(axisallied)。

此外,新的超级列表本身是否会被归类为综合列表或制作过程?

编辑:

请注意我不想这样做:

for a in list1:
    for b in a:
        c.append(b)

@美国洛特。我理解你的观点。然而,我正在尝试学习Python中的一些技巧,而不是我通常做的事情的标准方法。这只是为了让我更多地了解Python!

4 个答案:

答案 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.reduceoperator.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)