如何在Python中替换列表中的字符?

2024-09-21 03:15:16 发布

您现在位置:Python中文网/ 问答频道 /正文

list = ["/x01", "/x30", "/x30", "/x53", "/x46", "/x46", "/x46", "/x30", "/x30", "/x30", "/x31", "/x46", "/x46", "/x0D"]

for x in list:
    x.replace("[","").replace("]","").replace('"','').replace(" ","").replace(",","").replace("[","")

这没用。你能解释一下我可能做错了什么,并告诉我是否有更有效的方法来获得输出: “/x01/x30/x30/x53/x46/x46/x30/x30/x30/x31/x46/x46/x0D”


Tags: 方法inforreplacelistx01x46x31
3条回答

使用str.join

>>> lis = ["/x01", "/x30", "/x30", "/x53", "/x46", "/x46", "/x46", "/x30", "/x30", "/x30", "/x31", "/x46", "/x46", "/x0D"]
>>> ''.join(lis)
'/x01/x30/x30/x53/x46/x46/x46/x30/x30/x30/x31/x46/x46/x0D'

看看你的代码,我想你是在尝试对列表的str.replace应用str版本。但这样做会很奇怪,最好使用str.join

^{pr2}$

上面的字符串只是list对象的一个表示。在

>>> str(lis).replace("[","").replace("]","").replace(" ","").replace(",","").replace("'","")
'/x01/x30/x30/x53/x46/x46/x46/x30/x30/x30/x31/x46/x46/x0D'

您应该使用translate(None,nuke_list_string)

两个原因:

  1. replace执行一个1对1的替换,每次替换都会分配一个新的字符串,然后返回该字符串,如果像示例中那样链接一系列替换,则会导致大量开销。

  2. translate通常需要一对一的映射,即translate('ABC','ABC')会将字符串'a brown cow'转换为'a brown cow'。但是,如果指定None作为新映射,它将删除它找到的字符。

下面是一个例子:

a = 'this is [a] string with (stuff) in {it}'
print a.translate(None, '[]{}()')

产生:

^{pr2}$

第一个问题是replace没有就地更改字符串,它只返回一个新字符串。你忽略了那个新的字符串。在

你想要的是:

new_list = []
for x in list:
    new_list.append(x.replace("[","").replace("]","").replace('"','').replace(" ","").replace(",","").replace("[",""))

您可以使用translate来简化这个过程,或者使用不同的方法过滤掉字符,比如理解或filter调用。但结果是一样的。在


更大的问题是你想做的事情毫无意义。列表中没有一个元素包含[]"等字符。您可能混淆了列表的字符串表示和列表本身。在

如果你想加入一个列表的成员,或者产生一个列表的任何表示,而不是默认的repr,只需显式地join它们。例如,这样可以得到您想要的:

^{pr2}$

…这得到了不同的表示:

' and '.join(list)

…这与repr大致相同:

'[' + ', '.join(map(repr, list)) + ']'

相关问题 更多 >

    热门问题