打印不在其他列表中的列表元素

时间:2019-06-06 18:01:35

标签: python python-3.x list for-loop

我有2个列表,我要在其中标识site_code中不在host_file中的元素。

我已经尝试了您在代码中看到的内容。

# two lists
site_list = ['4', '5', '3']
host_file = ['RTR1 site=3', 'RTR2 site=3', 'RTR1 site=5']

# empty list a with loops to add matches into it
a = []
for site_code in site_list:
    for line in host_file:
        if site_code in line:
            a.append(line)

# another set of loops to further filter
b = []
for line in a:
    if 'RTR1' in line:
        b.append(line)

# attempt to print out elements in site_list that have no match in host_file
for element in site_list:
    if element not in host_file:
        print(element)

最后一个代码块不起作用,因为它试图匹配每个元素的整个字符串。

我希望看到屏幕上仅印有host_file的任何元素中没有的元素'4'。

4 个答案:

答案 0 :(得分:2)

使用迭代和set查找:

site_list = ['4', '5', '3']
host_file = ['RTR1 site=3', 'RTR2 site=3', 'RTR1 site=5']

h_file = [y.split('=')[1] for y in host_file]
for x in site_list:
    if x not in set(h_file):
        print(x)

# 4

或者在创建h_file之后,您可以进行set的区别,从而产生set作为输出:

set(site_list) - set(h_file)
# {'4'}

答案 1 :(得分:0)

一个简单的解决方案是在'='处分割主机字符串,并获取最后一个元素。但是,如果您想变得更强大,更通用,可以改用正则表达式模式匹配。

这是嵌入在列表理解中的简单解决方案:

hosts = [h.split(sep='=')[-1] for h in host_file]

然后在上一个循环中,将检查hosts而不是host_file

答案 2 :(得分:0)

您可以使用add.apply_async((2, 2),ignore_result=True, link=add.s(16)) 来获取两个集合之间的差异。

由于元素set.difference采用不同的格式,因此您需要先处理该格式。

host_file

答案 3 :(得分:0)

In [5]: site_list = ['4', '5', '3'] 

In [6]: [ii.split('=')[1] for ii in host_file]                                                                                                
Out[6]: ['3', '3', '5']

In [7]: aa = [ii.split('=')[1] for ii in host_file]                                                                                           

In [8]: set(site_list)-set(aa)                                                                                                                
Out[8]: {'4'}

In [9]: list(set(site_list)-set(aa))                                                                                                         
Out[9]: ['4']