2009-11-19 105 views
0

比方说,我有一个地方叫majorPowers包含这两个列表名单:添加列表元素的“大名单”

axis=["germany","italy","japan"] 
allies=["russia","uk","us"] 

我想插入每个列表的元素,进入一个新的百万列表。目前,我正在这样做:

>>> 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!

+0

有什么不对你的“我不想做”的解决方案? (1)它的工作。 (2)短而清楚。它出什么问题了? – 2009-11-19 11:08:59

+2

python list.extend'for for b in a:c.append'(b)' – 2009-11-19 11:11:26

+1

我只是想指出,你使用append的列表理解可能已经写成ww2 = [axis,allies]来产生结果。下面有一些很好的解决方案,但他们没有提到列表展平,这就是你正在做的。如果你谷歌的“Python列表扁平化”,那么你应该谈论一些有趣的讨论。 – 2009-11-19 11:40:32

回答

5

,你问这个问题,因为它是不好的形式滥用列表 内涵一样,这是件好事。您显示的代码使用append,而不是生成temp的 元素,但是由于其副作用。 避免列表中的副作用 理解

所以,你可以做几件事情。首先,你可以使用 itertools.chain

>>> from itertools import chain 
>>> list(chain(*mayorPowers)) 
['germany', 'italy', 'japan', 'russia', 'uk', 'us'] 

不是传递的mayorPowers个别参数的元素chain的,你也可以使用itertools.chain.from_iterable

>>> 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'] 
+0

我不要认为你需要导入减少 - 我认为'reduce'和'map'是内置的(至少从2.5) – robince 2009-11-19 11:10:36

+0

@thrope:2.x是的,但不是在3.x. (“减少”经常被滥用,正如你所看到的,在这个例子中,它也不是首选的方法。) – Stephan202 2009-11-19 11:12:26

+0

你总是提供一个详尽的,写得很好的答案,Stephan202。非常感激! :) – Federer 2009-11-19 11:18:28

1
from itertools import chain 
ww2 = list(chain.from_iterable(majorPower)) 
+0

-1:itertools的不必要的使用 – 2009-11-19 10:58:39

+0

或者,由于市长权力数量有限,所以'list(chain(* mayorPowers))'。 – Stephan202 2009-11-19 10:58:45

+0

sum(majorPowers,[])有什么问题呢? – 2009-11-19 11:01:27

0

尽量延长

for t in majorPowers: ww2.extend(t) 

sum(majorPowers,[]) 
0

我会使用减少:

from operator import add 
ww2 = reduce(add, majorPowers) 
+0

Downvote无评论? – robince 2009-11-19 11:12:13