Python:比较列表中的元素并打印匹配计数最大的元素
我刚刚开始学习python 我试图比较列表中的元素。例如,我有一个列表:Python:比较列表中的元素并打印匹配计数最大的元素,python,python-2.7,list,Python,Python 2.7,List,我刚刚开始学习python 我试图比较列表中的元素。例如,我有一个列表: list = [['red', 'blue', 'black'], ['red', 'blue', ' white'], ['red', 'pink']] 现在,我如何将元素0:['red'、'blue'、'black']与列表中的其余元素进行比较,并打印匹配数最大的元素,就像最匹配的元素是['red'、'blue'、'white']下一个['red'、'pink'] 更新: 在这一点上,我设法做到了如下: mylist
list = [['red', 'blue', 'black'], ['red', 'blue', ' white'], ['red', 'pink']]
现在,我如何将元素0:['red'、'blue'、'black']
与列表中的其余元素进行比较,并打印匹配数最大的元素,就像最匹配的元素是['red'、'blue'、'white']
下一个['red'、'pink']
更新:
在这一点上,我设法做到了如下:
mylist = [set(item) for item in list]
for i, item in enumerate(mylist):
for i1 in xrange(i + 1, len(mylist)):
for val in (item & mylist[i1]):
print "Index {} matched with index {} for value
{}".format(i,i1,val)
if i == 0:
print list[(i1)]
输出:
Index 0 matched with index 1 for value "Red"
['red', 'blue', ' white']
Index 0 matched with index 1 for value "Blue"
['red', 'blue', ' white']
...
我找到了一个解决方案:
任何帮助都将不胜感激。
谢谢。您可以按交叉点集的长度对列表进行排序:
key = ['red', 'blue', 'black']
l = [['red', 'pink'], ['red', 'blue', ' white'], ['red', 'blue', 'black']]
sorted_by_matching = sorted(l, key=lambda x: -len(set(x) & set(key)))
print(sorted_by_matching)
>> [['red', 'blue', 'black'], ['red', 'blue', ' white'], ['red', 'pink']]
你能展示一下到目前为止你都做了些什么吗?解释您的实现的哪一部分给您带来了困难。尝试使用计数器,或者更确切地说。仅在内容或位置上匹配?仅在内容中匹配谢谢,这是解决我问题的非常简单的方法,但我有问题。例如,我如何打印3个答案中的2个?如何更改打印方式,例如将一个答案打印在另一个答案下?@user7375796您可以从列表中获得一个答案。如果您想获得前n个元素,只需执行
l[:n]
。例如,前2个元素:l[:2]
,在本例中是[['red','blue','black',['red','blue','white']
。