Создание списка Python с несколькими циклами - PullRequest
0 голосов
/ 29 мая 2019

Допустим, у меня есть один список ['A', 'B', 'C']

, а второй [1,2]

Я хочу создать новый список [(A, 1), (A, 2), (B, 1) ...]

Очевидно, что это можно сделать тривиально, используя цикл for, подобный следующему:

a = ['A','B','C']
b = [1,2]
c = []
for x in a:
    for y in b:
        c.append((x,y))

c
[('A', 1), ('A', 2), ('B', 1), ('B', 2), ('C', 1), ('C', 2)]

, нокак я могу сделать это, используя синтаксис [x для x in ...]?

Ответы [ 5 ]

4 голосов
/ 29 мая 2019

Вам нужен декартово произведение из двух списков:

>>> from itertools import product

>>> list(product(a, b))
[('A', 1), ('A', 2), ('B', 1), ('B', 2), ('C', 1), ('C', 2)]

В отличие от явного понимания списка, оно легко масштабируется для любого числа входных итераций.Подробнее см. здесь .

3 голосов
/ 29 мая 2019

Взгляните на itertools.product:


>>> from itertools import product
>>> a = [ 'A', 'B', 'C' ]
>>> b = [ 1, 2]
>>> [ x for x in product(a, b) ]
[('A', 1), ('A', 2), ('B', 1), ('B', 2), ('C', 1), ('C', 2)]

2 голосов
/ 29 мая 2019
Синтаксис

[x for x in...] имеет имя, и он называется списком, вы можете записывать свои циклы между [ и ] и помещать внутреннее большинство перед вашими циклами.

[(x, y) for x in a for y in b]
2 голосов
/ 29 мая 2019

Использование списков Python:

[(i, j) for i in a for j in b]

Использование модуля:

from itertools import product

list(product(a, b))
1 голос
/ 29 мая 2019

В вашем случае версия списка может быть:

>>> [(x, y) for x in "ABC" for y in [1,2]]
[('A', 1), ('A', 2), ('B', 1), ('B', 2), ('C', 1), ('C', 2)]

Обратите внимание, что порядок имеет значение, то есть для фиксированного x='A' возможные значения y сначала повторяются.

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