[英]Python - Replacing chars within list of strings
我正在尝试从以下列表中每个项目的字符2到3中删除字符“ 0”:
list1 = ['0x001', '0x002', '0x0a3']
我想要的输出是:
list1 = ['0x1', '0x2', '0xa3']
到目前为止,这是我尝试过但未成功的方法:
for i in list1:
if i[2:3] == '0':
i.replace('0', '')
但这不会更改列表中的项目。 先感谢您!
在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
仍引用原始列表。
您可以使用re.sub
:
import re
list1 = ['0x001', '0x002', '0x0a3']
new_result = [re.sub('(?<=x)[0]+', '', i) for i in list1]
输出:
['0x1', '0x2', '0xa3']
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.