识别两个列表或词典中重复项的最佳方法?

假设您有两个列表,例如:

list1 = [-2,-1,1,2,3]
list2 = [4,4,9]

...并将这两个列表压缩到字典中以产生:

dict1 = {-2: 4,-1: 1,0: 0,1: 1,2: 4,3: 9}

...其中list1是键,list 2是值。

您会注意到list2中的某些元素是重复的,例如4和1。它们在列表2中出现两次,因此在字典中出现。

-2 corresponds to 4
 2 corresponds to 4
-1 corresponds to 1
 1 corresponds to 1

我正在尝试找出一种方法使用列表或词典来识别list2中的重复项,并从列表1中返回其键。

所以我希望从上面两个列表中返回的值是:

(-2,2) #From list 1 since they both correspond to 4 in list2
(-1,1) #from list 1 since they both correspond to 1 in list2

在此示例中,list2恰好是list1的平方。但这并非总是如此。

所以最终,我要寻找的是一种基于重复值返回键的方法。

关于如何处理此问题的任何想法?我能够识别list2中的重复项,但是我完全停留在如何识别列表1中的对应值上。

yhfhr8100 回答:识别两个列表或词典中重复项的最佳方法?

在python3中:

from itertools import groupby
list1 = [-2,-1,1,2,3]
list2 = [4,4,9]
pairs = zip(list2,list1)
ordered = sorted(pairs,key=lambda x: x[0])
groups = ((k,list(g)) for k,g in groupby(ordered,key=lambda x: x[0])) # generator
duplicates = (k for k in groups if len(k[1])>1) # generator
for k,v in duplicates :
    print(str(k) + " : " + str(list(v)))

结果:

1 : [(1,-1),(1,1)]
4 : [(4,-2),(4,2)]

奖金:在功能性c#中:

var list1 = new[] { -2,3 };
var list2 = new[] { 4,9 };
var g = list1.Zip(list2,(a,b) => (a,b)) //create tuples
    .GroupBy(o => o.b,o => o.a,(k,group) => new { key = k,group = group.ToList() }) //create groups
    .Where(o => o.group.Count > 1) // select group with minimum 2 elements
    .ToList(); // no lazy
foreach (var kvp in g)
    Console.WriteLine($"{kvp.key}: {string.Join(",",kvp.group)}");

结果:

4: -2,2
1: -1,1
本文链接:https://www.f2er.com/3140790.html

大家都在问