假设我有一个majorPowers包含这两个列表的名单:
axis=["germany","italy","japan"]
allies=["russia","uk","us"]
Run Code Online (Sandbox Code Playgroud)
我想将这些列表的每个元素插入到一个新的大型列表中.我现在正在这样做:
>>> temp = []
>>> temp = [ww2.append(t) for t in majorPowers]
>>>ww2
[['germany','italy','japan'],['russia','uk','us']]
Run Code Online (Sandbox Code Playgroud)
如何调整此值以不使用temp和插入单个元素ww2而不是列表本身(axis和allied).
此外,新的大型名单本身会被归类为一个全面的清单,还是制作它的过程?
编辑:
请注意我不想这样做:
for a in list1:
for b in a:
c.append(b)
Run Code Online (Sandbox Code Playgroud)
@美国洛特.我理解你的观点.然而,我正在尝试学习Python中的一些技巧,而不是我通常做的事情的标准方法.这只是为了让我更多地了解Python!
你问这个问题是好的,因为滥用这样的列表理解是不好的形式.您展示的代码使用的append不是生成元素temp,而是因为它的副作用.避免列表推导中的副作用!
所以,你可以做几件事.首先,您可以使用
itertools.chain:
>>> from itertools import chain
>>> list(chain(*mayorPowers))
['germany', 'italy', 'japan', 'russia', 'uk', 'us']
Run Code Online (Sandbox Code Playgroud)
您也可以使用以下方法,而不是将mayorPowers各个参数的元素传递给:chainitertools.chain.from_iterable
>>> list(chain.from_iterable(mayorPowers))
['germany', 'italy', 'japan', 'russia', 'uk', 'us']
Run Code Online (Sandbox Code Playgroud)
或者您可以使用extend:
>>> ww2 = []
>>> for mp in mayorPowers:
... ww2.extend(mp)
...
>>> ww2
['germany', 'italy', 'japan', 'russia', 'uk', 'us']
Run Code Online (Sandbox Code Playgroud)
或者sum(我想我最喜欢这个):
>>> sum(mayorPowers, [])
['germany', 'italy', 'japan', 'russia', 'uk', 'us']
Run Code Online (Sandbox Code Playgroud)
或者,有点疯狂(使用functools.reduce和operator.add),
>>> from functools import reduce
>>> from operator import add
>>> reduce(add, mayorPowers)
['germany', 'italy', 'japan', 'russia', 'uk', 'us']
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
174 次 |
| 最近记录: |