例如:
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
这有效,但我想知道是否有更有效的方式。
答案 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')]