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

时间:2013-11-21 19:07:39

标签: 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 / X46 / X30 / X30 / X30 / X31 / X46 / X46 / X0D”

3 个答案:

答案 0 :(得分:2)

使用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

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

上面的字符串只是列表对象的表示。

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

答案 1 :(得分:2)

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

你想要的是:

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

您可以使用translate简化该操作,或使用其他方式过滤字符,例如理解或filter调用。但结果将是相同的。


更大的问题是,你要做的事情没有任何意义。您列表中的所有元素都不会包含[]"等字符。您可能会将列表的字符串表示与列表本身混淆。

如果您想加入列表成员,或者生成除默认repr以外的列表的任何表示,请明确join。例如,这可以得到你想要的东西:

''.join(list)

......这会有不同的表现形式:

' and '.join(list)

...这与repr大致相同:

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

答案 2 :(得分:0)

你应该使用translate(None,nuke_list_string)

有两个原因:

  1. replace执行1对1的替换,每次替换都会导致分配一个新的字符串然后返回,如果你链接一堆替换就会产生大量的开销,就像你在示例中所做的那样

  2. 翻译通常需要一对一的映射,即翻译('ABC','abc')会将字符串'棕色奶牛'转换为'A Brown Cow'。但是,如果您指定作为新映射,则会删除找到的字符。

  3. 以下是一个例子:

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

    产地:

    this is a string with stuff in it