我正在尝试使用长格式名称替换列表中的值。
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
我只需要更改列表中的值,看来做错了。谁能帮助我以有效的方式做到这一点,所以我不需要从各个输出中创建另一个列表?
答案 0 :(得分:1)
然后使用列表理解:
Div
输出:
print([re.sub(r'Gi', 'GigabitEthernet', value) for value in value_list])
答案 1 :(得分:1)
要“就地”更改列表,您需要将列表中的每个项目设置为新值。仅执行value = re.sub(r'Gi', 'GigabitEthernet', item)
不会更改列表中存储的值。
此代码更改列表中的值:
>>> 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']
enumerate
函数为您生成列表索引,因此您可以通过Python(for item in mylist
)遍历列表,而不必直接建立索引(for i in range(len(mylist))
),这会产生可读性较低的代码。 / p>
答案 2 :(得分:1)
此代码将更新现有列表:
{% filter indent(width=4) %}
{% include "./sub-template.yml.j2" %}
{% endfilter %}
答案 3 :(得分:1)
使用map
例如:
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)
输出:
['GigabitEthernet1/0/8', 'GigabitEthernet1/0/31', 'GigabitEthernet1/0/32', 'GigabitEthernet1/0/33', 'GigabitEthernet1/0/34', 'GigabitEthernet1/0/23', 'GigabitEthernet1/0/27']