为什么下面的顺序不同。
编辑:
对此,正确的解决办法是什么,即删除重复项并保留顺序
def rt(s):
s = list(s)
print s
print set(s)
print rt('abc')
输出
['a', 'b', 'c']
set(['a', 'c', 'b'])
None
答案 0 :(得分:3)
因为set
不是有序结构。在内部,set
使用哈希表,并且没有限制哈希函数维护其参数的排序。
答案 1 :(得分:3)
您可以使用符合您目的的OrderedSet。
pip install orderedset
from orderedset import OrderedSet
def rt(s):
s = list(s)
print s
print OrderedSet(s)
print rt('abc')
答案 2 :(得分:1)
def unique(sequence):
seen = set()
for e in sequence:
if e not in seen:
seen.add(e)
yield e
用法:
>>> ''.join(unique('aaabbddeffg'))
'abdefg'
请参阅itertools
recipes了解更高效的版本,名为unique_everseen
。
答案 3 :(得分:0)
如果您想拥有一个保留订单的集合,您可以在此处查看各种解决方案: Why are there no containers sorted by insertion order in Python's standard libraries?
如果您想消除重复项并对其进行排序,您可以使用:
s = sorted(set(s))
从最内心的呼唤:
set
- 删除重复项
sorted
- 按升序对其进行排序。
此外,您错过了一个返回语句,因此最后一次打印为None