比较两个具有不同格式的列表

时间:2019-11-21 20:23:29

标签: python python-3.x pandas list

我有两个列表:-

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是父列表,我想比较Etcd的流入量。

1。)我想获取列表中不存在的所有元素并返回它们。

2。)如何通过省略/xymon/fnwp/mphhos/

将etcd列表转换为流入列表格式

以上任何一个问题都可以为我解决。

我尝试了很多方法,但是由于格式不同,我没有得到解决方案。

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

3 个答案:

答案 0 :(得分:1)

str.rsplit

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

根据拉斐尔克的建议

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

答案 1 :(得分:0)

一种简单的解决方案是删除前缀

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

然后您可以使用set()找到区别。

答案 2 :(得分:0)

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)