如何遍历包含三对值的元组列表?

Cor*_*man 5 python tuples list

我想从第一个元素相同的列表中删除元组,因为我将字母对视为具有相同的值,尽管它们有序.这是我试图迭代的列表,称为tuples2:

[(3, 'A', 'C'), (3, 'C', 'A'), (2, 'B', 'C'), (2, 'C', 'B'), (1, 'A', 'B'), (1, 'B', 'A')]
Run Code Online (Sandbox Code Playgroud)

我目前的代码:

for i in list(tuples2):
    if i[0] == i+1[0]:
        tuples2.remove(i)
    print tuples2
Run Code Online (Sandbox Code Playgroud)

...抛出这个错误:

line 6: if i[0] == (i+1)[0]: TypeError: can only concatenate tuple (not "int") to tuple
Run Code Online (Sandbox Code Playgroud)

如果我想结束,我该如何修改我的代码以解决这个问题 [(3, 'A', 'C'), (2, 'B', 'C'), (1, 'A', 'B')]呢?

jua*_*aga 4

这段代码中有很多危险信号。您不应该修改正在迭代的列表,这将导致您停止跳过项目。编辑我现在看到您在 for 循环中复制了列表,但是以下方法仍然更安全一些。您可以向后迭代,但构建新列表可能更容易。一种简单的方法是跟踪已经见过的第一个元素,并且仅在您之前没有见过第一个元素时才添加:

In [1]: data = [(3, 'A', 'C'), (3, 'C', 'A'), (2, 'B', 'C'), (2, 'C', 'B'), (1, 'A', 'B'), (1, 'B', 'A')]
   ...:
In [2]: seen = set()

In [3]: new_data = []
   ...: for triple in data:
   ...:     first = triple[0]
   ...:     if first in seen:
   ...:         continue
   ...:     seen.add(first)
   ...:     new_data.append(triple)
   ...:

In [4]: new_data
Out[4]: [(3, 'A', 'C'), (2, 'B', 'C'), (1, 'A', 'B')]
Run Code Online (Sandbox Code Playgroud)

使用.remove效率非常低。它将您的算法更改为 O(n^2) 而不是 O(n)。