如何使用'set'保持有序列表?

pyt*_*bie 4 python list set

我希望能够在比较时保持列表的顺序.注意当我将list1与list2进行比较时,它返回8然后是7(反向).我如何维护订单?

>>> list1 = ['1','2','3','4','7','8'] 
>>> list2 = ['1','2','3','4','5','6']
>>> list(set(list2) - set(list1))    
['5', '6']
>>> list(set(list1) - set(list2))    
['8', '7']
Run Code Online (Sandbox Code Playgroud)

wim*_*wim 5

An OrderedDict可以替代保留订单的集合,因为密钥视图是设置的:

>>> from collections import OrderedDict
>>> list1 = ['1','2','3','4','7','8'] 
>>> list2 = ['1','2','3','4','5','6']
>>> OrderedDict.fromkeys(list1).keys() - OrderedDict.fromkeys(list2).keys()
{'7', '8'}
>>> OrderedDict.fromkeys(list2).keys() - OrderedDict.fromkeys(list1).keys()
{'5', '6'}
Run Code Online (Sandbox Code Playgroud)

严格来说,这可能仍然使用CPython的实现细节.但列表推导不是,它们仍然是O(n):

>>> od1 = OrderedDict.fromkeys(list1)
>>> od2 = OrderedDict.fromkeys(list2)
>>> [k for k in od1 if k not in od2]
['7', '8']
>>> [k for k in od2 if k not in od1]
['5', '6']
Run Code Online (Sandbox Code Playgroud)

  • @pylang不太好.Python 3.7+或CPython 3.6+. (3认同)