对元组列表进行排序

1 投票
4 回答
935 浏览
提问于 2025-04-16 01:21

我有一个包含元组的列表,元组的格式是(a,b,c,d),我想把那些'a'的值是唯一的元组复制到一个新的列表里。我对Python还很陌生。

我现在的想法是这样,但没有成功:

for (x) in list:
   a,b,c,d=(x)
   if list.count(a)==1:
      newlist.append(x)

4 个回答

2
values = {}

for t in tups:
  a,b,c,d = t
  if a not in values:
    values[a] = (1, t)
  else:
    count, tup = values[a]
    values[a] = (count+1, t)

unique_tups = map(lambda v: v[1],
                  filter(lambda k: k[0] == 1, values.values()))

我使用一个字典来存储 a 的值以及与这个 a 值相关的元组。字典中每个键对应的值是一个元组 (count, tuple),其中 count 表示这个 a 值出现的次数。

最后,我会从 values 字典中过滤出那些 只有count 为 1 的 a 值,也就是它们是独一无二的。然后我会把这个列表映射,返回那些元组,因为此时 count 的值肯定是 1。

现在,unique_tups 是一个包含所有独特 a 值的元组的列表。

在收到评论者的反馈后进行了更新,谢谢大家!

2

你可以使用一个集合来记录重复的项:

seen_a = set()
for x in list:
    a, b, c, d = x
    if a not in seen_a:
        newlist.append(x)
        seen_a.add(x)
3

如果你不想添加那些有重复a值的元组(也就是说,你只想添加第一次出现的某个a,而不想添加后面出现的重复a):

seen = {}
for x in your_list:
    a,b,c,d = x
    seen.setdefault(a, []).append(x)

newlist = []
for a,x_vals in seen.iteritems():
    if len(x_vals) == 1:
        newlist.append(x_vals[0])

撰写回答