问题描述
我有一个元组。我想遍历每个嵌套的元组,但是我想检查它是否已经添加到其他列表中(检查基于IP的重复项)。如果尚未添加,我想将整个嵌套元组的内容添加到新列表中。
我想我知道它没有按照我的计划做,因为我需要检查新列表中每个嵌套元组的IP,以查看其是否重复,但是我不知道如何检查内部的嵌套元素。新列表。
example = (('ROUTER1','17.2.155.224','WS-C3850-48T-E'),('ROUTER2','27.24.251.212',('ROUTER3','WS-C3850-48T-E'))
new_list = []
for item in example:
if item[1] in new_list:
pass
else:
new_list.append(item)
print(new_list)
解决方法
使用字典而不是列表,因此检查重复的IP将更加容易和有效。
字典键是IP,值是元组。
example = (('ROUTER1','17.2.155.224','WS-C3850-48T-E'),('ROUTER2','27.24.251.212',('ROUTER3','WS-C3850-48T-E'))
new_dict = dict()
for item in example:
# Checking if an IP already been added
if item[1] in new_dict.keys():
pass
else:
# Adding a new entry to the dictionary => < IP : tuple >
new_dict[item[1]] = item
print(new_dict.values())
,
有两种方法可以做到这一点。
选项1:
您可以在自己的循环中使用列表理解。这样可以保留您当前使用的结构,并且不会添加新变量,但是会增加时间复杂度。
example = (('ROUTER1','WS-C3850-48T-E'))
new_list = []
for item in example:
if item[1] in [elm[1] for elm in new_list]:
pass
else:
new_list.append(item)
print(new_list)
选项2
这种方式引入了一个新变量,但速度更快,因为您不必在每次迭代时都通过变量循环一个额外的集合。
example = (('ROUTER1','WS-C3850-48T-E'))
new_list = []
found = []
for item in example:
if item[1] in found:
pass
else:
new_list.append(item)
found.append(item[1])
print(new_list)