Python 在嵌套列表中配对元素
我有一张这样的清单Python 在嵌套列表中配对元素,python,python-3.x,list,nested-lists,Python,Python 3.x,List,Nested Lists,我有一张这样的清单 a = [1, 2, 3, 4] b = [3, 2, 0.3] c = [0.1, 3, 6.8] d = [9, 2.5, 7, 2] x = [a, b, c, d] 我想这样搭配它们: [a, b], [b, a], [a, c], [c, a], [a, d], [d, a], [b, c], [c, b], [b, d], [d, b], [c, d], [d, c] 我就是这样做的: for i in range(len(x)): for j in
a = [1, 2, 3, 4]
b = [3, 2, 0.3]
c = [0.1, 3, 6.8]
d = [9, 2.5, 7, 2]
x = [a, b, c, d]
我想这样搭配它们:
[a, b], [b, a], [a, c], [c, a], [a, d], [d, a], [b, c], [c, b], [b, d], [d, b], [c, d], [d, c]
我就是这样做的:
for i in range(len(x)):
for j in range(len(x):
if i!= j:
#TODO...
print(x[i], x[j])
我的问题是:有没有更聪明的方法来提高性能?(当x有6-7个项目时,我可以看出它会慢很多)
你的任何意见都会对我有很大帮助
谢谢使用:
如评论所述,对于特定的顺序,您可以使用:
给了我一个有趣的想法。在这里,使用itertools.combinations
,它按您要查找的顺序返回项目
from itertools import combinations
def foo(x):
for x in combinations(x, 2):
yield from (x, x[::-1]) # python3.3+
for i in foo(['a', 'b', 'c', 'd']):
print(i)
('a', 'b')
('b', 'a')
('a', 'c')
('c', 'a')
('a', 'd')
('d', 'a')
('b', 'c')
('c', 'b')
('b', 'd')
('d', 'b')
('c', 'd')
('d', 'c')
将['a','b','c','d']
替换为[a,b,c,d]
,这是您的实际列表
注意:在python上,您可以尝试
zip
:
a = [1,2,3]
b = [4,5,6]
c = [7,8,9]
x = [a,b,c]
y = []
for i in range (0,len(x)):
for j in range (i + 1, len(x)):
y.append(zip(x[i],x[j]))
y.append(zip(x[j],x[i]))
print y
如果您想获得OP指定的顺序,可能最简单的方法是使用基于
组合的方法,将每个组合向前和向后。您介意删除组合方法吗?这和我的答案是一样的。不完全一样,你能扩展你的吗?我不这么认为?牺牲可读性来将其放在一行中不是一个好主意。这个想法不是将其放在一行中,而是使用itertools
为什么。\uuuu len\uuuuu
而不是len()
?x.\uu len\uuuu()
?使用len(x)
better@COLDSPEED我发现你的解决方案真的很容易阅读,适合我的需要。Thanks@ryanvolap很乐意帮忙。干杯
from itertools import combinations
def foo(x):
for x in combinations(x, 2):
yield from (x, x[::-1]) # python3.3+
for i in foo(['a', 'b', 'c', 'd']):
print(i)
('a', 'b')
('b', 'a')
('a', 'c')
('c', 'a')
('a', 'd')
('d', 'a')
('b', 'c')
('c', 'b')
('b', 'd')
('d', 'b')
('c', 'd')
('d', 'c')
a = [1,2,3]
b = [4,5,6]
c = [7,8,9]
x = [a,b,c]
y = []
for i in range (0,len(x)):
for j in range (i + 1, len(x)):
y.append(zip(x[i],x[j]))
y.append(zip(x[j],x[i]))
print y