我有一个列表 L = [a, b, c] 并且我想生成一个元组列表:
[(a,a), (a,b), (a,c), (b,a), (b,b), (b,c)...]
我试着做 L * L 但它没有用。有人可以告诉我如何在 python 中得到这个。
我有一个列表 L = [a, b, c] 并且我想生成一个元组列表:
[(a,a), (a,b), (a,c), (b,a), (b,b), (b,c)...]
我试着做 L * L 但它没有用。有人可以告诉我如何在 python 中得到这个。
您可以通过列表理解来做到这一点:
[ (x,y) for x in L for y in L]
编辑
您也可以按照其他人的建议使用 itertools.product,但前提是您使用的是 2.6 及更高版本。列表推导适用于 2.0 以后的所有 Python 版本。如果你使用 itertools.product 请记住它返回的是一个生成器而不是一个列表,所以你可能需要转换它(取决于你想用它做什么)。
看一下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]
两种主要选择:
>>> 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 版本。
x = [a,b,c] y = [] 对于 x 中的项目:对于 x 中的项目 2:y.append((item, item2))
也许不是 Pythonic 的方式,而是工作
好的,我试过了:
L2 = [(x,y) for x in L for x in L] 这得到了 L 平方。
这是最好的pythonic方式吗?我希望 L * L 在 python 中工作。
最老式的方法是:
def perm(L):
result = []
for i in L:
for j in L:
result.append((i,j))
return result
它的运行时间为 O(n^2),因此速度很慢,但您可以将其视为“老式”样式代码。