Python 使用re.sub()遍历列表
我试图用长格式名称替换列表中的值Python 使用re.sub()遍历列表,python,Python,我试图用长格式名称替换列表中的值 value_list = ['Gi1/0/8', 'Gi1/0/31', 'Gi1/0/32', 'Gi1/0/33', 'Gi1/0/34', 'Gi1/0/23', 'Gi1/0/27'] 我正在运行以下脚本: for value in value_list: value = re.sub(r'Gi', 'GigabitEthernet', value) print value print value_list 这是我的输出: Gigab
value_list = ['Gi1/0/8', 'Gi1/0/31', 'Gi1/0/32', 'Gi1/0/33', 'Gi1/0/34', 'Gi1/0/23', 'Gi1/0/27']
我正在运行以下脚本:
for value in value_list:
value = re.sub(r'Gi', 'GigabitEthernet', value)
print value
print value_list
这是我的输出:
GigabitEthernet1/0/8
GigabitEthernet1/0/31
GigabitEthernet1/0/32
GigabitEthernet1/0/33
GigabitEthernet1/0/34
GigabitEthernet1/0/23
GigabitEthernet1/0/27
我只需要更改列表中的值,它似乎完全错了。有人能帮我高效地完成这项工作吗?这样我就不需要从单独的输出中创建另一个列表???然后改用列表理解:
print([re.sub(r'Gi', 'GigabitEthernet', value) for value in value_list])
输出:
['GigabitEthernet1/0/8', 'GigabitEthernet1/0/31', 'GigabitEthernet1/0/32', 'GigabitEthernet1/0/33', 'GigabitEthernet1/0/34', 'GigabitEthernet1/0/23', 'GigabitEthernet1/0/27']
['GigabitEthernet1/0/8', 'GigabitEthernet1/0/31', 'GigabitEthernet1/0/32', 'GigabitEthernet1/0/33', 'GigabitEthernet1/0/34', 'GigabitEthernet1/0/23', 'GigabitEthernet1/0/27']
要“就地”更改列表,需要将列表中的每个项目设置为新值。只需执行value=re.sub(r'Gi',GigabitEthernet',项)
不会更改列表中存储的值
此代码更改列表中的值:
>>> value_list = ['Gi1/0/8', 'Gi1/0/31', 'Gi1/0/32', 'Gi1/0/33', 'Gi1/0/34', 'Gi1/0/23', 'Gi1/0/27']
>>> for idx, item in enumerate(value_list):
... value_list[idx] = re.sub(r'Gi', 'GigabitEthernet', item)
...
>>> value_list
['GigabitEthernet1/0/8', 'GigabitEthernet1/0/31', 'GigabitEthernet1/0/32', 'GigabitEthernet1/0/33', 'GigabitEthernet1/0/34', 'GigabitEthernet1/0/23', 'GigabitEthernet1/0/27']
该函数为您生成列表索引,因此您可以通过pythonical(
for item in mylist
)对列表进行迭代,而不是直接为i in range(len(mylist))编制索引,从而生成可读性较差的代码。此代码更新现有列表:
value_list = ['Gi1/0/8', 'Gi1/0/31', 'Gi1/0/32', 'Gi1/0/33', 'Gi1/0/34', 'Gi1/0/23', 'Gi1/0/27']
for i in range(len(value_list)):
value_list[i] = re.sub(r'Gi', 'GigabitEthernet', value_list[i])
print value_list
# ['GigabitEthernet1/0/8', 'GigabitEthernet1/0/31', 'GigabitEthernet1/0/32', 'GigabitEthernet1/0/33', 'GigabitEthernet1/0/34', 'GigabitEthernet1/0/23', 'GigabitEthernet1/0/27']
使用map
Ex:
import re
value_list = ['Gi1/0/8', 'Gi1/0/31', 'Gi1/0/32', 'Gi1/0/33', 'Gi1/0/34', 'Gi1/0/23', 'Gi1/0/27']
value_list = list(map(lambda value: re.sub(r'Gi', 'GigabitEthernet', value), value_list))
print(value_list)
输出:
import re
value_list = ['Gi1/0/8', 'Gi1/0/31', 'Gi1/0/32', 'Gi1/0/33', 'Gi1/0/34', 'Gi1/0/23', 'Gi1/0/27']
value_list = list(map(lambda value: re.sub(r'Gi', 'GigabitEthernet', value), value_list))
print(value_list)