Добавление элементов списков в «Мега список» - PullRequest
0 голосов
/ 19 ноября 2009

Допустим, у меня где-то есть список с именем 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 вместо самих списков (axis и allied).

Кроме того, будет ли новый мегатекст сам по себе классифицироваться как всеобъемлющий список или процесс его создания?

EDIT:

Обратите внимание, я не хочу делать:

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

@S.Lott. Я понимаю вашу точку зрения. Однако я пытаюсь изучить некоторые приемы в Python вместо стандартного способа, которым я обычно делаю вещи. Это просто, чтобы открыть мой разум Python немного больше!

Ответы [ 4 ]

5 голосов
/ 19 ноября 2009

Хорошо, что вы задаете этот вопрос, потому что плохая форма злоупотреблять списком такие понимания. Код, который вы показываете, использует 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.reduce и operator.add),

>>> from functools import reduce
>>> from operator import add
>>> reduce(add, mayorPowers)
['germany', 'italy', 'japan', 'russia', 'uk', 'us']
1 голос
/ 19 ноября 2009
from itertools import chain
ww2 = list(chain.from_iterable(majorPower))
0 голосов
/ 19 ноября 2009

Я бы использовал уменьшение:

from operator import add
ww2 = reduce(add, majorPowers)
0 голосов
/ 19 ноября 2009

попробуйте продлить

for t in majorPowers: ww2.extend(t)

или

sum(majorPowers,[])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...