我的清单很长,所以效率对我来说是个问题。我想知道是否有一种比较整洁的方式来比较列表列表,而不是在同一列表的循环中遍历列表(更易于查看示例)
matchList=[]
myList = [ ('a',[1,2,3]), ('b', [2,3,4]), ('c', [3,4,5]), ('d', [4,5,6]) ]
tup_num=1
for tup in myList:
for tup2 in myList[tup_num:]:
id=str(tup[0])+':'+str(tup2[0])
matches=set(tup[1]) & set(tup2[1])
matchList.append((id,matches))
tup_num+=1
print matchList
输出:
[('a:b', set([2, 3])), ('a:c', set([3])), ('a:d', set([])), ('b:c', set([3, 4])), ('b:d', set([4])), ('c:d', set([4, 5]))]
这行得通,不会重复比较,但是我敢肯定必须有一个更好的方法。
干杯
>>> import itertools
>>> matchList = []
>>> myList = [('a',[1,2,3]), ('b', [2,3,4]), ('c', [3,4,5]), ('d', [6,7,8])]
>>> matchList = [
... ('{}:{}'.format(key1, key2), set(lst1) & set(lst2))
... for (key1, lst1), (key2, lst2) in itertools.combinations(myList, 2)
... ]
>>> matchList
[('a:b', set([2, 3])), ('a:c', set([3])), ('a:d', set([])), ('b:c', set([3, 4])), ('b:d', set([])), ('c:d', set([]))]
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句