python中带重复项的减法列表

2024-10-01 05:04:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两张单子:

l1=['TUDCAPL.CLM_NUM_CD',
    'TUDCAPL.CRT_TS',
    'TUDCAPL.CLM_NUM_CD',
    'TUDCAPL.CRT_TS',
    'TUDCAPJ.CLM_NUM_CD',
    'TUDCAPJ.CRT_TS']

l2 = ['TUDCAPL.CLM_NUM_CD',
      'TUDCAPL.CRT_TS']

我希望我的结果是

l3 = ['TUDCAPL.CLM_NUM_CD',
      'TUDCAPL.CRT_TS',
      'TUDCAPJ.CLM_NUM_CD',
      'TUDCAPJ.CRT_TS']

我用了l3 = [x for x in l1 if x not in l2] 但是结果是['TUDCAPJ.CLM_NUM_CD','TUDCAPJ.CRT_TS']忽略了重复项。我怎样才能获得与其他唯一值一起的副本?你知道吗


Tags: inl1forifnotcdnum单子
3条回答

复制列表(如果您不想更改l1)。在l2中的项上循环一次,并将其从新列表中删除。remove函数将丢弃每个项的第一次出现,而不影响其他项和顺序。你知道吗

l1 = ['TUDCAPL.CLM_NUM_CD',
      'TUDCAPL.CRT_TS',
      'TUDCAPL.CLM_NUM_CD',
      'TUDCAPL.CRT_TS',
      'TUDCAPJ.CLM_NUM_CD',
      'TUDCAPJ.CRT_TS']

l2 = ['TUDCAPL.CLM_NUM_CD',
      'TUDCAPL.CRT_TS']

l3 = list(l1)
for x in l2:
    if x in l3:
        l3.remove(x)

from pprint import pprint
pprint(l3)

结果:

['TUDCAPL.CLM_NUM_CD', 
 'TUDCAPL.CRT_TS', 
 'TUDCAPJ.CLM_NUM_CD', 
 'TUDCAPJ.CRT_TS']

您可以使用set

l3 = set(l1)
l3.update(l2)
print l3

我知道这不是最好的解决方案,但它将保持您列表中的顺序和独特元素:

from collections import OrderedDict

l1=['TUDCAPL.CLM_NUM_CD',
    'TUDCAPL.CRT_TS',
    'TUDCAPL.CLM_NUM_CD',
    'TUDCAPL.CRT_TS',
    'TUDCAPJ.CLM_NUM_CD',
    'TUDCAPJ.CRT_TS']

l2 = ['TUDCAPL.CLM_NUM_CD',
      'TUDCAPL.CRT_TS']


d = OrderedDict(zip(l1,[None]*len(l1)))
d2 = OrderedDict(zip(l2,[None]*len(l2)))

d.update(d2)
print(d.keys()) # this will contain the resulting list of strings

相关问题 更多 >