比较两个不同形式的列表

2024-06-02 14:00:43 发布

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

我有两份清单:

influx = [u'mphhos-fnwp-010101-2', 
          u'mphhos-fnwp-010101-1', 
          u'mphhos-fnwp-010101-7', 
          u'mphhos-fnwp-010101-10', 
          u'mphhos-fnwp-010101-9', 
          u'mphhos-fnwp-010101-4', 
          u'mphhos-fnwp-010101-3', 
          u'mphhos-fnwp-010101-8', 
          u'mphhos-fnwp-010101-6', 
          u'mphhos-fnwp-010101-5', 
          u'mphhos-fnwp-010101-11'] 

etcd =[u'/xymon/fnwp/mphhos/mphhos-fnwp-010101-4', 
       u'/xymon/fnwp/mphhos/mphhos-fnwp-010101-9', 
       u'/xymon/fnwp/mphhos/mphhos-fnwp-010101-1', 
       u'/xymon/fnwp/mphhos/mphhos-fnwp-010101-10', 
       u'/xymon/fnwp/mphhos/mphhos-fnwp-010101-3', 
       u'/xymon/fnwp/mphhos/mphhos-fnwp-010101-6', 
       u'/xymon/fnwp/mphhos/mphhos-fnwp-010101-7', 
       u'/xymon/fnwp/mphhos/mphhos-fnwp-010101-8', 
       u'/xymon/fnwp/mphhos/mphhos-fnwp-010101-11', 
       u'/xymon/fnwp/mphhos/mphhos-fnwp-010101-2', 
       u'/xymon/fnwp/mphhos/mphhos-fnwp-010101-5']

Etcd是父列表,我想将inflow与Etcd进行比较。你知道吗

1.)我想让列表中不存在的所有元素流入并返回它们。你知道吗

2.)如何通过省略/xymon/fnwp/mphhos/将etcd列表转换为inflox列表格式

以上任何一个问题都能帮我找到答案。你知道吗

我尝试了很多方法,但我没有得到我的解决方案,因为他们在不同的格式。你知道吗

我将通过执行set(etcd)-set(influx)得到我的答案,但是由于它们的格式不同,所以我得到了列表中的所有项目。你知道吗


Tags: 方法答案元素列表格式省略etcdinflox
3条回答
influx = [u'mphhos-fnwp-010101-2',
          u'mphhos-fnwp-010101-1',
          u'mphhos-fnwp-010101-7',
          u'mphhos-fnwp-010101-10',
          u'mphhos-fnwp-010101-9',
          u'mphhos-fnwp-010101-4',
          u'mphhos-fnwp-010101-3',
          u'mphhos-fnwp-010101-8',
          u'mphhos-fnwp-010101-6',
          u'mphhos-fnwp-010101-5',
          u'mphhos-fnwp-010101-11']

etcd =[u'/xymon/fnwp/mphhos/mphhos-fnwp-010101-4',
       u'/xymon/fnwp/mphhos/mphhos-fnwp-010101-9',
       u'/xymon/fnwp/mphhos/mphhos-fnwp-010101-1',
       u'/xymon/fnwp/mphhos/mphhos-fnwp-010101-10',
       u'/xymon/fnwp/mphhos/mphhos-fnwp-010101-3',
       u'/xymon/fnwp/mphhos/mphhos-fnwp-010101-6',
       u'/xymon/fnwp/mphhos/mphhos-fnwp-010101-7',
       u'/xymon/fnwp/mphhos/mphhos-fnwp-010101-8',
       u'/xymon/fnwp/mphhos/mphhos-fnwp-010101-11',
       u'/xymon/fnwp/mphhos/mphhos-fnwp-010101-2',
       u'/xymon/fnwp/mphhos/mphhos-fnwp-010101-5']

etcd = [x.replace('/xymon/fnwp/mphhos/', '') for x in etcd]

# or using regex
# etcd = [re.sub('/xymon/fnwp/mphhos/', '', x) for x in etcd]
diff = set(etcd) - set(influx)

print(diff)

str.rsplit

[x for x in etcd if x.rsplit('/', 1)[1] not in influx]

根据rafaelc的建议

infx = set(influx)
[x for x in etcd if x.rsplit('/', 1)[1] not in infx]

一个简单的解决方案是去掉前缀

for i, char in enumerate(etcd): 
    char = char.replace('/xymon/fnwp/mphhos/', '')
    etcd[i] = char

然后你可以用set()来找出差异。你知道吗

相关问题 更多 >