如果我有一个列表,其格式如下:
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))