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”
答案 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)
有两个原因:
replace执行1对1的替换,每次替换都会导致分配一个新的字符串然后返回,如果你链接一堆替换就会产生大量的开销,就像你在示例中所做的那样
翻译通常需要一对一的映射,即翻译('ABC','abc')会将字符串'棕色奶牛'转换为'A Brown Cow'。但是,如果您指定无作为新映射,则会删除找到的字符。
以下是一个例子:
a = 'this is [a] string with (stuff) in {it}'
print a.translate(None, '[]{}()')
产地:
this is a string with stuff in it