Python列表给出不同的顺序

时间:2015-08-20 13:12:08

标签: python

为什么下面的顺序不同。

编辑:

对此,正确的解决办法是什么,即删除重复项并保留顺序

def rt(s):
  s = list(s)
  print s
  print set(s)

print rt('abc')

输出

['a', 'b', 'c']
set(['a', 'c', 'b'])
None

4 个答案:

答案 0 :(得分:3)

因为set不是有序结构。在内部,set使用哈希表,并且没有限制哈希函数维护其参数的排序。

答案 1 :(得分:3)

您可以使用符合您目的的OrderedSet

Documentation

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