比较python中不同列表中的元素

时间:2014-07-15 21:00:00

标签: python list compare elements

所以我有一个关于如何在python中比较不同列表中的元素的问题。

我有这样的名单:

[element1, element2, element3, element4, ... ]
[element1, element2, element3, element4, ... ]
[element1, element2, element3, element4, ... ]
[element1, element2, element3, element4, ... ]

所以我想要的是比较每个列表中的element2,如果element2是相同的,我想只保留一个包含最大元素3的列表(假设元素3是整数)。所以最后所有列表中的element2都是唯一的。

我是Python新手,感谢您的患者!

3 个答案:

答案 0 :(得分:2)

检查所有第二个元素是否相等:

l1 = [1,2,7,4]
l2 = [1,2,4,5]
l3 = [3,2,6,5]

print len(set(zip(l1,l2,l3)[1])) == 1  # zip all lists and check all elements are equal using a set
True

zip(l1,l2,l3)看起来像[(1, 1, 3), (2, 2, 2), (6, 4, 6), (6, 5, 5)]其中zip(l1,l2,l3)[1] = (2, 2, 2),因为如果len是>则设置值是唯一的。 1然后我们没有所有常见的第二要素。

获取具有最大第三元素的列表:

print max(l1,l2,l3,key=lambda x : x[2]) # get list with greatest third element value
[1, 2, 7, 4]

如果你对最大的第三个元素有一个平局,你可以去第四个元素:

l1 = [1,2,6,6]
l2 = [1,2,4,5]
l3 = [3,2,6,5]

print max(l1,l2,l3,key=lambda x : ((x[2]),x[3]))
[1, 2, 6, 6]

答案 1 :(得分:1)

它可能不是最优雅的但是有效:

from collections import defaultdict

a = [1,2,3,4,5]
b = [2,2,5,5,3]
c = [5,2,8,1,1]
d = [1,1,1,1,1]
e = [5,1,2,3,4]
f = [1,1,5,5,5]

all_lists = [a,b,c,d,e,f]

dictionary = defaultdict(list)
for l in all_lists:
    dictionary[l[1]].append(l)

sorted_dict = {key:sorted(l, key=lambda x:x[2], reverse=True)[0] for key,l in dictionary.items()}

希望这有帮助!

编辑:无用的行

答案 2 :(得分:0)

首先,它按键值对列表进行分组。然后根据另一个键找到最大的元素

**Fixed To allow for unsorted lists/non consecutive groups**

def uniqueGroupBy(iterable,key = lambda x:x):
"grabs the groups of the iterable as a dictionary with list elements"
groups = {}
for each in iterable:
    dictKey = key(each)
    if groups.get(dictKey): groups[dictKey].append(each)
    else: groups[dictKey] = [each]
return groups


def cmpElementsByKey(a):
l = []
for k, g in uniqueGroupBy(a,key=lambda x:x[1]).iteritems(): #groups by the unique key which is your second item in the list
    l.append(max(g,key=lambda x:x[2]))    #chooses the list with the largest element 3
return l