所以我有一个关于如何在python中比较不同列表中的元素的问题。
我有这样的名单:
[element1, element2, element3, element4, ... ]
[element1, element2, element3, element4, ... ]
[element1, element2, element3, element4, ... ]
[element1, element2, element3, element4, ... ]
所以我想要的是比较每个列表中的element2,如果element2是相同的,我想只保留一个包含最大元素3的列表(假设元素3是整数)。所以最后所有列表中的element2都是唯一的。
我是Python新手,感谢您的患者!
答案 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