7

我有一个列表 L = [a, b, c] 并且我想生成一个元组列表:

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

我试着做 L * L 但它没有用。有人可以告诉我如何在 python 中得到这个。

4

7 回答 7

22

您可以通过列表理解来做到这一点:

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

编辑

您也可以按照其他人的建议使用 itertools.product,但前提是您使用的是 2.6 及更高版本。列表推导适用于 2.0 以后的所有 Python 版本。如果你使用 itertools.product 请记住它返回的是一个生成器而不是一个列表,所以你可能需要转换它(取决于你想用它做什么)。

于 2010-01-30T23:07:31.147 回答
15

itertools模块包含许多对这类事情有用的功能。看起来您可能正在寻找product

>>> 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)]
于 2010-01-30T23:07:27.937 回答
7

看一下itertools模块,它提供了一个product成员。

L =[1,2,3]

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

给出:

[(1,1),(1,2),(1,3),(2,1), ....  and so on]
于 2010-01-30T23:07:01.777 回答
3

两种主要选择:

>>> 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 版本。

于 2010-01-30T23:10:54.103 回答
0

x = [a,b,c] y = [] 对于 x 中的项目:对于 x 中的项目 2:y.append((item, item2))

也许不是 Pythonic 的方式,而是工作

于 2010-01-30T23:07:59.110 回答
0

好的,我试过了:

L2 = [(x,y) for x in L for x in L] 这得到了 L 平方。

这是最好的pythonic方式吗?我希望 L * L 在 python 中工作。

于 2010-01-30T23:08:59.997 回答
0

最老式的方法是:

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

它的运行时间为 O(n^2),因此速度很慢,但您可以将其视为“老式”样式代码。

于 2010-01-31T00:23:31.490 回答