删除python列表中的重复项

时间:2013-05-14 21:45:26

标签: python

我有以下标题列表:

titles = ['Saw (US)', 'Saw (AU)', 'Dear Sally (SE)']

我如何获得以下内容:

titles = ['Saw (US)', 'Dear Sally (SE)']

基本上,我需要删除重复的标题。无论哪个区域显示都无关紧要,只要它打开(即我可以删除任何副本)。

这是我尝试过的,但未成功:

[title for title in localized_titles if title.split(' (')[0] not in localized_titles]

7 个答案:

答案 0 :(得分:1)

如果这确实是您标题的确切格式,请确保您的localized_titles是正确的:

generic_titles = [t.split('(')[0] for t in titles]
titles = [title for title in titles if title.split(' (')[0] not in generic_titles]

但是,当标题中有其他括号时,所有中断

答案 1 :(得分:1)

我不确定这是最优雅的解决方案,但它应该可行 - 您可以使用非地域版本的标题作为字典键。

unique_titles = dict((title.rsplit(' (', 1)[0], title) for title in titles)

或者,如果您需要保留订单,则为OrderedDict。

unique_titles.values()将是包含地区的标题(每个标题一个)。

使用rsplit的可选参数将其限制为最多一次拆分,并且rsplit开始从结束而不是字符串的开头查找parens。

答案 2 :(得分:0)

尝试使用字典来跟踪阵列中每个项目的实例数。让字典中的键是数组中的值,字典的值是真还是假,取决于它是否已经看到该项。

然后,您可以遍历数组,添加到字典中并从数组中删除项目(如果它们存在于字典中)。我就是这样做的,但我还在学习。

答案 3 :(得分:0)

快,并保留订单

seen = set()
[title for title in titles
 if title.split(' (')[0] not in seen and not seen.add(title.split(' (')[0])]

答案 4 :(得分:0)

这是一个迂回的方式到达那里:

localized_titles, existing_stems = [], []
for item in localized:
    stem = item.split(' (')[0]
    if stem not in existing_stems:
        existing_stems.append(stem)
        localized_titles.append(item)

答案 5 :(得分:0)

为了代码高尔夫:

titles = ['('.join(x) for x in dict([x.split('(') for x in titles]).items()]

在国家/地区的开头,每个标题只假设一个(个字符。

答案 6 :(得分:0)

>>> from collections import OrderedDict
>>> titles = ['Saw (US)', 'Saw (AU)', 'Dear Sally (SE)']
>>> list(OrderedDict((t.rpartition(' (')[0], t) for t in titles).values())
['Saw (AU)', 'Dear Sally (SE)']