我有一个列表L = [a,b,c],我想生成一个元组列表:
[(a,a), (a,b), (a,c), (b,a), (b,b), (b,c)...]
我尝试过做L * L但是没有用。有人能告诉我如何在python中得到它。
答案 0 :(得分:22)
你可以用列表理解来做到这一点:
[ (x,y) for x in L for y in L]
修改强>
您也可以像其他人建议的那样使用itertools.product,但前提是您使用2.6以上版本。列表理解将适用于2.0的所有Python版本。如果你确实使用了itertools.product,请记住它返回一个生成器而不是列表,所以你可能需要转换它(取决于你想用它做什么)。
答案 1 :(得分:13)
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)]
答案 2 :(得分: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]
答案 3 :(得分: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版本。
答案 4 :(得分:0)
x = [a,b,c] y = [] 对于x中的项目: 对于x中的item2: y.append((item,item2))
也许不是Pythonic的方式而是工作
答案 5 :(得分:0)
好的我试过了:
L2 = [(x,y),对于x中的x,对于L中的x],这得到L平方。
这是最好的pythonic方式吗?我希望L * L能在python中运行。
答案 6 :(得分:0)
最老式的做法是:
def perm(L):
result = []
for i in L:
for j in L:
result.append((i,j))
return result
它的运行时间为O(n ^ 2),因此非常慢,但您可以将其视为“复古”样式代码。