繁体   English   中英

Python列表给出不同的顺序

[英]Python list giving different order

为什么下面的顺序不同。

编辑:

正确的解决方案是什么,即删除重复项并保留订单

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

print rt('abc')

输出量

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

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

您可以使用OrderedSet ,它可以满足您的目的。

文献资料

pip install orderedset


from orderedset import OrderedSet

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

print rt('abc')
def unique(sequence):
    seen = set()
    for e in sequence:
        if e not in seen:
            seen.add(e)
            yield e

用法:

>>> ''.join(unique('aaabbddeffg'))
'abdefg'

请参阅itertools食谱以获取效率更高的版本,称为unique_everseen

如果要使用保留顺序的集合,可以在此处查找各种解决方案: 为什么Python的标准库中没有按插入顺序对容器进行排序?

如果要消除重复项并对其进行排序,可以使用:

s = sorted(set(s))

从大多数内部调用:

set -删除重复项

sorted -按升序排序。

此外,您缺少return语句,因此最后打印为None

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM