我有一个类似这样的元组列表
tupleList = [('A',1), ('B',1), ('B',2), ('B',3), ('C',1)]
我希望能够解析此列表,获取具有相同字母的任何元组,然后删除具有较大字母数的元组并仅保留具有最小字母数的元组,因此我的输出将是:
('A',1), ('B',1), ('C',1)
答案 0 :(得分:1)
您可以从itertools.groupby
开始使用第二个元素对元组进行分组。
然后,为了在每个组中保持最小值,可以使用min
,它允许您指定key
,用它可以指定排序功能。在这种情况下,您可以使用key = itemgetter(1)
,它将在每个元组的第二元素中找到最小值:
from itertools import groupby
from operator import itemgetter
tupleList = [('A',1), ('B',1), ('B',2), ('B',3), ('C',1)]
[min(v, key = itemgetter(1)) for k, v in groupby(tupleList, key = itemgetter(0))]
输出
[('A', 1), ('B', 1), ('C', 1)]
答案 1 :(得分:-4)
您基本上将每个元组放入tupleList中,并将其与其中的其他元组进行比较-如果它们具有相同的字母,则比较它们的值。删除值更大的那一个:
tupleList1 = [('A',2), ('A',1), ('A',3), ('B',1), ('B',2), ('B',3), ('C',1)]
tupleList2 = [('A',2), ('A',1), ('A',3), ('B',1), ('B',2), ('B',3), ('C',1)]
print(tupleList1)
for t1 in tupleList1:
for t2 in tupleList2:
if t2[0] == t1[0]:
if t1[1] < t2[1]:
tupleList1.remove(t2)
elif t1[1] > t2[1]:
tupleList1.remove(t1)
tupleList2.remove(t1)
t1 = t2
print(tupleList1)