如何将IP地址替换为列表中的字符串,通过检查IP地址之间的重复来对python中的字符串进行排序



如果我有一个列表,其格式如下:

List1 = ['0.0.0.0', '192.168.1.193', '192.168.1.120', '10.0.0.155', '0.0.0.0',
'192.168.1.240', '192.168.0.242','192.168.1.120']

我想知道是否有可能将列表1中的IP地址替换为短字符串,同时考虑IP地址之间的重复,以获得下面的列表2:

List1 = ['IP1','IP2','IP3','IP4','IP1','IP5','IP6'.'IP3']

IP地址的重复可以在列表1中的任何位置。

算法:

  • 创建一个空查找字典
  • 为占位符创建一个数字变量
  • 在列表中迭代一次
    • 如果项不在字典中
      • 指定为键,并指定占位符字符串作为值
      • 添加后增加占位符编号
    • 如果dict中已有项,请忽略
  • 通过在dict中查找原始列表的每个元素来创建一个新列表,并使用占位符字符串

获取这些占位符的列表:

data = ['0.0.0.0', '192.168.1.193', '192.168.1.120', '10.0.0.155', '0.0.0.0',
'192.168.1.240', '192.168.0.242','192.168.1.120']
# create lookup dict
ips = {} 
n= 1
for thing in data:
if thing not in ips:
ips[thing] = f"IP{n}"
n += 1
# create looked up value list
rv = [ips[k] for k in data]
print(rv)

输出:

['IP1', 'IP2', 'IP3', 'IP4', 'IP1', 'IP5', 'IP6', 'IP3']

调色版本:

dic = {}
for i in List1:
if i not in dic:
dic[i] = f"IP{len(dic)+1}"

在将原始列表中的元素映射到它们的名称表示IP$N之后,您只需映射键(原始IP地址(中的值(字符串(dict到原始列表的

List1 = list(map(lambda x: dic[x], List1))

最新更新