我有一个元组列表:
x = [('abc', (7, 1, 8, 41), None), ('efg', (12, 2, 13, 42), None)]
element = (13, 2, 14, 78)
我需要获取具有最接近“元素”的元组的元组。 即我需要以('efg',(12,2,13,42),无)的答案来获取元素= (13,2,14,78) >
如何在python中做到这一点?
答案 0 :(得分:1)
这很简单。让我们逐步解决您的问题。
通过2个元组对匹配项进行计数,并获得最大。
maxCount = 0
index = 0
for i,item in enumerate(x):
count = 0
for a in element:
if a in item[1]:
count+=1
if maxCount < count:
index = i
print(x[i])
答案 1 :(得分:0)
另一种方法是获取ele & i[1] for i in x
集的对称差异。我们可以用每个新的set
以及它来自的x
的索引来组成一个元组。然后,我们可以从此处按set
对新的len
进行排序,并使用set with the smallest
len which is also the least different, and plug that into
x`
res = [(set(element) ^ set(i[1]), x.index(i)) for i in x]
res = sorted(res, key=lambda x: len(x[0]))
# ('efg', (12, 2, 13, 42), None)