如何从列表中删除相似的值并打印剩余的值

时间:2011-09-08 21:24:26

标签: python list

list =[('1', '5'), ('3', '5'), ('4', '5'), ('5', '1'), ('5', '3'), ('5', '4')]

上面是一个生成列表,现在我只想写(5,1)(1,5)和(5,1)与其他值相同。

期望的输出

list = [('5', '1'), ('5', '3'), ('5', '4')]

5 个答案:

答案 0 :(得分:1)

如果项目的反向不在列表中,或者项目大于反向项目,则将项目添加到新列表中。

newlist = []
for item in oldlist:
    rev = item[::-1]
    if (not (rev in oldlist)) or (item > rev)
        newlist.append(item)

答案 1 :(得分:0)

l = [('1', '5'), ('3', '5'), ('4', '5'), ('5', '1'), ('5', '3'), ('5', '4')]

s=set()
for e in l:
  if e[0] >= e[1]:
    s.add(e)
  else:
    s.add((e[1], e[0]))

l = list(s)

注意:它不保留订单。如果这很重要:

s=set(); l2 = []
for e in l:
  if e[0] < e[1]:
    e = (e[1], e[0])
  if not e in s:
    s.add(e)
    l2.append(e)

答案 2 :(得分:0)

li =[('1', '5'), ('3', '5'), ('4', '5'), ('5', '1'), ('5', '3'), ('5', '4')]

gen = ((a,b) if a>b else (b,a) for a,b in li)
lu = []
[lu.append(y) for y in gen if y not in lu]

print lu

答案 3 :(得分:0)

如果订单不重要,您可以使用listset功能实现此目的,如下所示:

orig_list =[('1', '5'), ('3', '5'), ('4', '5'), ('5', '1'), ('5', '3'), ('5', '4')]
modified_list = list(set([(t[0], t[1]) if t[0] > t[1] else (t[1], t[0]) for t in orig_list]))

简洁,如果有点密集。

答案 4 :(得分:0)

my_list = [('1', '5'), ('3', '5'), ('4', '5'), ('5', '1'), ('5', '3'), ('5', '4')]
new_list = [(a, b) if (a > b) else (b, a) for a, b in my_list]
result = list(set(new_list))