让我澄清一下我的问题: 我的最终目标是从列表中删除重复的IP地址。我主要需要帮助解决以下问题:每当我尝试应用代码(itertools,' for'循环等)从输出中删除重复项时,我一直遇到维护IP地址完整性的问题。
总结:
1.我的输出是一个包含匹配字符串(ip地址)的元组
2.I将元组转换为列表列表 - print(hop_list)
3.I列表中的索引[0]以获取我需要的IP地址 - print(ips) 问题出在哪里?输出看起来不像列表一览?
4.我应用各种代码解决方案来删除重复的地址但由于某种原因我丢失了IP地址的完整性。
每个exscript api文档: •anymatch:如果找到匹配且正则表达式有多个组,则返回包含组中匹配字符串的元组。
def ios_commands(job, host, conn): #function to execute IOS commands
conn.execute('terminal length 0')
conn.execute('tr {}'.format(DesAddr))
print('The results of the traceroute', repr(conn.response))
for hops in any_match(conn, r"((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)([ (\[]?(\.|dot)[ )\]]?(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3})"):
hop_list = list(hops) #create a list from tuple
ips = hop_list[0] #index on targeted addresses
print(list(uniqify(ips))) #filter out duplicates
print(hop_list) #so far so good, list of lists from tuple
[' 192.33.12.4',' 192',' .4','。',' 4& #39]
[' 192.33.12.4',' 192',' .4','。',' 4& #39]
[' 192.32.0.174',' 192',' .174','。',' 174& #39]
[' 192.32.0.190',' 192',' .190','。',' 190& #39]
[' 192.33.226.225',' 192',' .225','。',' 225& #39]
[' 192.33.226.237',' 192',' .237','。',' 237& #39]
[' 192.33.12.4',' 192',' .4','。',' 4& #39]
打印(ips)#index第一个值,因为这是我需要的地址
192.33.12.4
192.33.12.4
192.32.0.174
192.32.0.190
192.33.226.225
192.33.226.237
192.33.12.4
打印(列表(uniqify(IPS)))
[' 1',' 9','。',' 3',' 2', ' 4']
[' 1',' 9','。',' 3',' 2', ' 4']
[' 1',' 9','。',' 3',' 2', ' 7',' 4']
[' 1',' 9','。',' 3',' 2', ' 9']
[' 1',' 9','。',' 3',' 2', ' 6',' 5']
[' 1',' 9','。',' 3',' 2', ' 6',' 7']
[' 1',' 9','。',' 3',' 2' ,' 4']
答案 0 :(得分:1)
set(yourList)
将删除任何重复值
答案 1 :(得分:0)
您可以随时使用ips_as_set = set(ips)
删除重复的IP,但这是批量操作并丢弃订单(可能没问题)。
如果您想按顺序迭代IP并在运行中删除重复项,则可以执行以下操作:
from __future__ import print_function
def uniqify(iterable):
seen = set()
for item in iterable:
if item not in seen:
seen.add(item)
yield item
for unique_item in uniqify([1, 2, 3, 4, 3, 2, 4, 5, 6, 7, 6, 8, 8]):
print(unique_item, end=' ')
print()
输出:
1 2 3 4 5 6 7 8