gpt4 book ai didi

元组列表列表中的 Python 比较

转载 作者:行者123 更新时间:2023-11-28 22:31:53 25 4
gpt4 key购买 nike

我是 python 的新手,我对元组列表中的比较有疑问。我有一个列表,其中包含元组中第二个元素的副本,我只想打印该元组的第一次出现。例如,对于此列表:

[(1, 2), (5, 10), (6, 10), (24, 35), (30, 35)] 

我有这个功能:

def func(lst):
list_first = []
#Checks if 2 elements have the same second value.
for i in range(len(lst)-1):
if(lst[i][1] == lst[i+1][1]):
first = (lst[i][0]),lst[i][1]
list_first.append(first) #append only the first element
print list_first

我的函数的输出是:

[(5, 10), (24, 35), (30, 35)]

但我的预期输出是:

[(5, 10), (24, 35)]

我该如何解决?

更新

我必须在列表列表中执行所有这些算法。所以对于输入:

[[(0, 3), (1, 3), (2, 3), (3, 3), (4, 3)], [(5, 3), (6, 3), (7, 3), (8, 3), (9, 3)], [(10, 3), (11, 3), (12, 3), (13, 3), (14, 3)]]

我希望输出为:

[[(0, 3)], [(5, 3)], [(10, 3)]]

我试过哦,改变我在这里得到的解决方案。但我得到的只是:

[[(0, 3)], [(0, 3)], [(0, 3)]]

最佳答案

不假设排序输入的解决方案

您可以使用以元组中的第二个值作为键的字典。如果 this 键第二次出现,则将已经看到的元组附加到您的结果中。如果您第三次或更多次看到该元组,请不要再次追加。如果发现超过两次,则集合 added 包含已添加的第二个元组条目:

from __future__ import print_function # makes work in Python 2 and 3

def find_first(lst):
seen = {}
res = []
added = set()
for elem in lst:
key = elem[1]
if key in seen and key not in added:
res.append(seen[key])
added.add(key)
else:
seen[key] = elem
return res

用 lis 测试。注意最后一个元素 (60, 10)10 第三次重复:

L = [(1, 2), (5, 10), (6, 10), (24, 35), (30, 35), (60, 10)] 
print(find_first(L))

输出:

[(5, 10), (24, 35)]

使用排序并适用于此示例数据:

L = [(1, 2), (6, 10), (5, 10), (24, 35), (30, 35), (60, 10)] 
print(find_first(L))

输出:

[(6, 10), (24, 35)]

其他答案的解决方案不适用于此数据:

from itertools import groupby

L = [(1, 2), (6, 10), (5, 10), (24, 35), (30, 35), (60, 10)]
final = []
for _, v in groupby(sorted(a) , lambda x : x[1]):
b = list(v)
if len(b) > 1:
final.append(b[0])

print(final)

输出:

[(5, 10), (24, 35)]

关于元组列表列表中的 Python 比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41389144/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com