Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:比较列表中的元素并打印匹配计数最大的元素_Python_Python 2.7_List - Fatal编程技术网

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

我刚刚开始学习python

我试图比较列表中的元素。例如,我有一个列表:

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']