Python-替换字符串列表中的字符

时间:2018-08-23 15:20:27

标签: python string list replace char

我正在尝试从以下列表中每个项目的字符2到3中删除字符“ 0”:

list1 = ['0x001', '0x002', '0x0a3']

我想要的输出是:

list1 = ['0x1', '0x2', '0xa3']

这是我到目前为止尝试过但未成功的方法:

for i in list1:

   if i[2:3] == '0':
        i.replace('0', '')

但这不会更改列表中的项目。先感谢您!

2 个答案:

答案 0 :(得分:2)

在Python中,字符串(字节或Unicode)是不可变的。这意味着您不能更改它,只能使该变量引用一个新值。

列表是可变对象,因此您可以更改其各个元素。

您可以在这里做

for index, i in enumerate(list1):
    if i[2:3] == '0':
        list1[index] = i[:2] + i[2:].replace('0', '')

(您不能在整个字符串中替换'0',因为您要保留最初的字符串)


要坚持可变性:上面的代码修改 list1,同时:

list1 = [ i[:2] + i[2:].replace('0', '') for i in list1 ]

将创建一个新列表。

只需查看这两个示例代码:

list1 = ['0x001', '0x002', '0x0a3']
list2 = list1

for index, i in enumerate(list1):
    if i[2:3] == '0':
        list1[index] = i[:2] + i[2:].replace('0', '')

print(list1, list2)

输出为:

['0x1', '0x2', '0xa3'] ['0x1', '0x2', '0xa3']

因为列表已被修改,所以list2指向修改后的列表。但是

list1 = ['0x001', '0x002', '0x0a3']
list2 = list1

list1 = [ i[:2] + i[2:].replace('0', '') for i in list1 ]
print(list1, list2)

输出为:

['0x1', '0x2', '0xa3'] ['0x001', '0x002', '0x0a3']

因为list1是一个新列表,而list2仍引用原始列表。

答案 1 :(得分:1)

您可以使用re.sub

import re
list1 = ['0x001', '0x002', '0x0a3']
new_result = [re.sub('(?<=x)[0]+', '', i) for i in list1]

输出:

['0x1', '0x2', '0xa3']