Умножение списка

У меня есть список L = [a, b, c], и я хочу генерировать список кортежей:

[(a,a), (a,b), (a,c), (b,a), (b,b), (b,c)...] 

Я пытался делать L * L, но он не работал. Может кто-то говорить мне, как получить это в Python.

5
задан Xavier Ho 15 May 2010 в 08:59
поделиться

7 ответов

Модуль ITERTOOLS содержит ряд полезных функций для такого рода вещей. Похоже, вы можете искать продукты :

>>> import itertools
>>> L = [1,2,3]
>>> itertools.product(L,L)
<itertools.product object at 0x83788>
>>> list(_)
[(1, 1), (1, 2), (1, 3), (2, 1), (2, 2), (2, 3), (3, 1), (3, 2), (3, 3)]
13
ответ дан 18 December 2019 в 05:16
поделиться

Вы можете сделать это со списком понимания:

[ (x,y) for x in L for y in L]

Редактировать

Вы также можете использовать ITERTOOLS .Продукт как другие предложили, но только если вы используете 2.6 внутрь. Понимание списка будет работать будут все версии Python от 2.0. Если вы используете Itertools.product, имейте в виду, что он возвращает генератор вместо списка, поэтому вам может потребоваться преобразовать его (в зависимости от того, что вы хотите сделать с ним).

22
ответ дан 18 December 2019 в 05:16
поделиться

Две основные альтернативы:

>>> L = ['a', 'b', 'c']
>>> import itertools
>>> list(itertools.product(L, L))
[('a', 'a'), ('a', 'b'), ('a', 'c'), ('b', 'a'), ('b', 'b'), ('b', 'c'), ('c', 'a'), ('c', 'b'), ('c', 'c')]
>>> [(one, two) for one in L for two in L]
[('a', 'a'), ('a', 'b'), ('a', 'c'), ('b', 'a'), ('b', 'b'), ('b', 'c'), ('c', 'a'), ('c', 'b'), ('c', 'c')]
>>> 

Бывший нужен Python 2.6 или лучше - последние работают практически в любой версии Python, к которой вы можете быть связаны.

3
ответ дан 18 December 2019 в 05:16
поделиться

x = [a, b, c] y = [] Для элемента в х: Для элемента2 в х: y.append (((товар, элемент2))

Может быть, не питон, а работа

0
ответ дан 18 December 2019 в 05:16
поделиться

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

L =[1,2,3]

import itertools
res = list(itertools.product(L,L))
print(res)

Gives:

[(1,1),(1,2),(1,3),(2,1), ....  and so on]
7
ответ дан 18 December 2019 в 05:16
поделиться

Хорошо, я попробовал:

l2 = [(x, y) для x в l для x в l], и это получил l квадрат.

Это лучший питонический способ сделать это? Я бы ожидал, что l * l работать в Python.

0
ответ дан 18 December 2019 в 05:16
поделиться

Самый старомодный способ сделать это:

def perm(L):
    result = []
    for i in L:
        for j in L:
            result.append((i,j))
    return result

Это имеет время выполнения O (N ^ 2) и поэтому довольно медленно, но вы могли бы рассмотреть это «винтажный» код стиля.

0
ответ дан 18 December 2019 в 05:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: