如何删除Python列表中的所有重复项?

时间:2017-11-02 22:15:01

标签: python

例如:

newList = [1, 1, 2, 2, 2, 2, 3, 4, 4, 4, 4, 5, 5]

我需要列表:

newList = [3]

另一个例子:

tempList = [["cheese", "ham"], ["spinach", "dressing"], ["cheese", "ham"]]

列表将是:

tempList = [["spinach", "dressing"]]

它不能使用任何不能对不可用项目起作用的东西 - 真正的列表中会有列表存储。我还将拥有超过100,000个物体,因此速度是最重要的因素。我不需要列表有任何顺序。

这是我到目前为止所提出的:

newList.sort()

i = 0
while i < newList.__len__()-1:
    x = 1
    while newList[i].__eq__(newList[i + x]):
        x += 1
        if not (i + x <= newList.__len__()- 1):
            break
    if x != 1:
        for j in range(i, i + x):
            del newList[i]
        i-=1
    i+=1

这有效,但我想知道是否有更有效的方式。

4 个答案:

答案 0 :(得分:1)

我建议生成一个新列表。一个简单的循环可以工作:

lst = [1, 1, 2, 2, 2, 2, 3, 4, 4, 4, 4, 5, 5]

new = []

for x in lst:
    if lst.count(x) == 1:
        new.append(x)

print(new)

#output:

[3]

答案 1 :(得分:0)

您可以将所有内容转换为do JavaScript "$('[id^=submitButton_]').click();" in document 1 重新进行,使用repr查找唯一元素,然后使用Counter将所有内容转换回对象。这适用于ast.literal_eval等内容,但不适用于所有内容。

[1, [1, 23], [1, 23]]

答案 2 :(得分:0)

试试这个:

tempList = [[“cheese”,“ham”],[“spinach”,“dressing”],[“cheese”,“ham”]]

下面的函数将返回值为1的字典。

 from collections import Counter
    dict = {}
    for j in newList:
        for i in Counter(j):
            if i in dict:
                del dict[i]
            else:
                dict.update({i:1})
    print dict

其他清单= [1,1,2,2,2,3,4,4,4,4,5,5]

只需首先删除for循环

答案 3 :(得分:0)

你可以试试这个:

def counter(newList):
   counter_list = {tuple(i) if not any(isinstance(i, b) for b in [int, str, float]) else i:newList.count(i) for i in newList}
   return [a for a, b in counter_list.items() if b == 1]

newList = [1, 1, 2, 2, 2, 2, 3, 4, 4, 4, 4, 5, 5]
print(counter(newList))

输出:

[3]

newList包含列表时:

tempList = [["cheese", "ham"], ["spinach", "dressing"], ["cheese", "ham"]]
print(counter(tempList))

输出:

[('spinach', 'dressing')]