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)