从列表中删除无法转换为的重复项

2024-06-25 06:02:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个函数的结果列表,列表如下:

lovers=[['Warner', 'Lugar'], ['Warner', 'Murkowski'], ['Warner', 'Smith'], ['Chambliss', 'Allard'], ['Chambliss', 'Isakson'], ['Lugar', 'Warner'], ['Lugar', 'Murkowski'], ['Lugar', 'Smith'], ['Murkowski', 'Warner'], ['Murkowski', 'Lugar'], ['Murkowski', 'Smith'], ['Allard', 'Chambliss'], ['Allard', 'Isakson'], ['Smith', 'Warner'], ['Smith', 'Lugar'], ['Smith', 'Murkowski'], ['Grassley', 'Talent'], ['Grassley', 'Bond'], ['Grassley', 'Allen'], ['Grassley', 'Roberts'], ['Talent', 'Grassley'], ['Talent', 'Bond'], ['Talent', 'Allen'], ['Talent', 'Roberts'], ['Durbin', 'Sarbanes'], ['Bond', 'Grassley'], ['Bond', 'Talent'], ['Bond', 'Allen'], ['Bond', 'Roberts'], ['Allen', 'Grassley'], ['Allen', 'Talent'], ['Allen', 'Bond'], ['Allen', 'Roberts'], ['Sarbanes', 'Durbin'], ['Roberts', 'Grassley'], ['Roberts', 'Talent'], ['Roberts', 'Bond'], ['Roberts', 'Allen'], ['Isakson', 'Chambliss'], ['Isakson', 'Allard']]

我想把这个列表转换成有重复项的列表。i、 如果['Warner', 'Lugar']已经存在了,那么我不想要['Lugar', 'Warner']。我该怎么做?你知道吗


Tags: 列表smithbondwarnertalentallenrobertslugar
3条回答

为什么不使用frozenset

from pprint import pprint
pprint(set(map(frozenset, lovers)))
set([frozenset(['Bond', 'Roberts']),
     frozenset(['Lugar', 'Smith']),
     frozenset(['Murkowski', 'Warner']),
     frozenset(['Allard', 'Chambliss']),
     frozenset(['Allen', 'Roberts']),
     frozenset(['Roberts', 'Talent']),
     frozenset(['Allard', 'Isakson']),
     frozenset(['Bond', 'Talent']),
     frozenset(['Lugar', 'Warner']),
     frozenset(['Allen', 'Talent']),
     frozenset(['Allen', 'Grassley']),
     frozenset(['Allen', 'Bond']),
     frozenset(['Smith', 'Warner']),
     frozenset(['Lugar', 'Murkowski']),
     frozenset(['Chambliss', 'Isakson']),
     frozenset(['Grassley', 'Roberts']),
     frozenset(['Murkowski', 'Smith']),
     frozenset(['Bond', 'Grassley']),
     frozenset(['Grassley', 'Talent']),
     frozenset(['Durbin', 'Sarbanes'])])

您还可以使用:

pprint(OrderedDict.fromkeys((map(frozenset, lovers))).keys())

它保留顺序对,但任意只选取一个值。(如果这很重要的话,您也可以考虑使用OrderedSet配方而不是使用OrderedDict)。你知道吗

为什么不能做成一套呢?你知道吗

def remove_duplicates(lst):
    return set([tuple(sorted(pair)) for pair in lst])

使用它:

>>> unique_lovers = sorted(remove_duplicates(lovers))
>>> for pair in unique_lovers:
    print pair

('Allard', 'Chambliss')
('Allard', 'Isakson')
('Allen', 'Bond')
('Allen', 'Grassley')
('Allen', 'Roberts')
('Allen', 'Talent')
('Bond', 'Grassley')
('Bond', 'Roberts')
('Bond', 'Talent')
('Chambliss', 'Isakson')
('Durbin', 'Sarbanes')
('Grassley', 'Roberts')
('Grassley', 'Talent')
('Lugar', 'Murkowski')
('Lugar', 'Smith')
('Lugar', 'Warner')
('Murkowski', 'Smith')
('Murkowski', 'Warner')
('Roberts', 'Talent')
('Smith', 'Warner')

唯一“不利的一面”是你失去了名单的顺序,也失去了恋人自己的顺序。你知道吗

使用元组而不是列表:

lovers=[('Warner', 'Lugar'), ('Warner', 'Murkowski'), ('Warner', 'Smith'), ... ]

因为tuples是不可变的,所以您可以将整个列表转换为一个集合,以便删除重复项。你知道吗

相关问题 更多 >