我对 Python 相当陌生,我有兴趣在列表中列出重复项。我知道如何删除列表中的重复项(set() )以及如何使用collections.Counter列出列表中的重复项;但是,对于我正在处理的项目,这不是最有效的方法,因为运行时间为n(n-1)/2 --> O(n^2)并且 n 介于 5k 之间-50k+ 字符串值。
所以,我的想法是,由于 python 列表是链接的数据结构,并在创建时分配给内存,所以我从创建列表的一开始就开始计算重复项。
- 创建列表,第一个索引值是单词“dog”
- 第二个索引值是单词'cat'
- 现在,它将检查第二个索引是否等于第一个索引,如果它被附加到另一个名为 Duplicates 的列表中。
- 第三个索引值被赋值为'dog',第三个索引会检查它是否等于'cat'然后'dog';因为它匹配第一个索引,所以它被附加到 Duplicates。
- 第四个索引被指定为“dog”,但它只会检查第三个索引,而不是第二个和第一个,因为现在你可以假设,由于第三个和第二个不是重复的,所以第四个不需要之前检查,并且因为第三个/第一个相等,搜索在第三个索引处停止。
我的项目给了我这些值并将其附加到一个列表中,所以我想实现上述算法,因为我不在乎有多少重复项,我只想知道是否有重复项。
我想不出如何编写代码,但我想出了它的基本结构,但我可能完全不知道(使用随机 numgen 以便于使用):
for x in xrange(0,10):
list1.append(x)
for rev, y in enumerate(reversed(list1)):
while x is not list1(y):
cond()
if ???