有序集Python 2.7
|
我有一个尝试从中删除重复项的列表。我正在使用python 2.7.1,因此我可以简单地使用set()函数。但是,这重新排列了我的列表。对于我的特殊情况,这是不可接受的。
下面是我编写的函数;做到这一点。但是我想知道是否有更好/更快的方法。此外,对此的任何评论将不胜感激。
def ordered_set(list_):
newlist = []
lastitem = None
for item in list_:
if item != lastitem:
newlist.append(item)
lastitem = item
return newlist
上面的函数假定所有项目都不是None,并且项目按顺序排列(即[\'a \',\'a \',\'a \',\'b \',\' b \',\'c \',\'d \'])
上面的函数返回[\'a \',\'a \',\'a \',\'b \',\'b \',\'c \',\'d \']作为[\ 'A B C D\']。
没有找到相关结果
已邀请:
8 个回复
倾坞髓
栖很钾是狠
缉康怪
舶啥戚
授巨
来包含您已经访问过的物品,但是对于您而言,则没有必要。
朗排谎纷瘟
有关内联删除的信息,请参见在迭代时从列表中删除项目或在迭代时从列表中删除项目,而无需在Python中使用额外的内存 您可以使用的一个技巧是,如果您知道x已排序,并且知道x [i] = x [i + j],则无需检查x [i]和x [i + j]之间的任何内容(如果您不需要删除这些j值,则可以将所需的值复制到新列表中) 因此,如果集合中的所有内容都是唯一的,即您无法击败n次运算,即len(set(x))= len(x) 可能存在一种算法,它的n个比较是最坏的情况,但是可以将n / 2个比较作为它的最佳情况(如果您事先知道len(x)/ len( set(x))> 2,因为您已经生成了数据): 最佳算法可能会使用二分法搜索以分而治之的方式为每个最小值i找到最大值j。初始除法的长度可能为len(x)/近似(len(set(x)))。希望可以这样执行,即使len(x)= len(set(x))仍然只使用n个操作。
泻伴墓荒
闪票仇门韧
我不知道您将获得什么性能,应该进行测试;可能由于方法过热而相同! 如果您真的像我一样偏执,请阅读以下内容: http://wiki.python.org/moin/HowTo/Sorting/ http://wiki.python.org/moin/PythonSpeed/PerformanceTips 只是想起了这个(它包含答案): http://www.peterbe.com/plog/uniqifiers-benchmark