为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用“设置”保持有序列表?

如何使用“设置”保持有序列表?

胡说叔叔 2021-05-14 18:11:59
我希望能够在比较时保持列表的顺序。请注意,当我将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']
查看完整描述

3 回答

?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

AnOrderedDict可以很好地替代保留订单的集合,因为键视图类似于集合:


>>> 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'}

严格来说,这可能仍在使用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']


查看完整回答
反对 回复 2021-05-25
?
守候你守候我

TA贡献1802条经验 获得超10个赞

您可以使用列表推导:


list1 = ['1','2','3','4','7','8'] 

list2 = ['1','2','3','4','5','6']


set1 = set(list1)  # convert to set for faster membership testing

result = [x for x in list2 if x not in set1]

# result: ['5', '6']

但是,这将包括重复的元素:


>>> list1 = [1]

>>> list2 = [1, 2, 2]

>>> set1 = set(list1)

>>> [x for x in list2 if x not in set1]

[2, 2]

如果不需要重复,只需将列表理解转换为循环并跟踪已遇到的所有元素:


list1 = [1] 

list2 = [1, 2, 2]


set1 = set(list1)

result = []


for x in list2:

    if x in set1:

        continue


    result.append(x)

    set1.add(x)


# result: [2]


查看完整回答
反对 回复 2021-05-25
?
jeck猫

TA贡献1909条经验 获得超7个赞

尽管此操作不使用-运算符进行设置,但它确实保留了原始列表的顺序。


list1 = ['1','2','3','4','7','8'] 

list2 = ['1','2','3','4','5','6']

set_list2 = set(list2)

result = []

for item in list1:

    if not item in set_list2:

        result.append(item)

        set_list2.add(item) # to avoid duplicates in result

print(result)

# ['7', '8']


查看完整回答
反对 回复 2021-05-25
  • 3 回答
  • 0 关注
  • 154 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号