Python replace() - 如何避免重复 replace()?



sorted_elems列表中有一些元素将被更改为str,例如:

sorted_elems = ['[abc]', '[xyz]', ['qwe']]

我想删除定义的字符 -[]'并打印下面的输出:

所以输出应该看起来像这样:abcxyzqwe

我的解决方案是:

print(str(sorted_elems).replace('[', '').replace(']', '').replace("'", "")) 

它工作正常,但问题是如何避免重复这些replace()

你可以改用.strip()-

sorted_elems = ['[abc]', '[xyz]', '[qwe]']
for i in sorted_elems: 
print (i.strip("[]"), end=' ')

输出:

abc xyz qwe

您可以使用正则表达式子函数代替替换函数。

re.sub(r"([|]|')",'',str(sorted_elems))
>>'abc, xyz, qwe'

如果您希望每个分开:

re.sub(r"([|]|')",'',str(sorted_elems)).split(', ')
>> ['abc', 'xyz', 'qwe']

定义一个新函数,该函数将从列表中清除定义的字符。

您的解决方案是一个很大的黑客,可扩展性不强。您忽略了sorted_elems是一个列表,并且其中的最后一个值也是一个列表这一事实。

我认为这里要做的正确的事情是清理每个元素,然后返回列表,但是这是必需的。

clean_element函数需要在sorted_elems的每个元素上运行。

def clean_element(elem):
if not elem:
return ''  # empty list or None or empty string
elif isinstance(elem, list):
elem = elem[0]  # get the first element of the list out

return elem.replace('[', '').replace(']', '')

现在我们可以将其应用于每个元素,并根据需要返回列表。

cleaned_elems = [clean_element(e) for e in sorted_elems]
print(', '.join(cleaned_elems)

我认为问题的一部分是关于比replace()更好的摆脱东西的方法。有两种方法,strip()re.sub()strip()是我的偏好,因为不需要导入任何东西。

清洁输入的结构后,每个元件要么完全清洁,要么被[]包围,可以剥离。

return elem.replace('[', '').replace(']', '')

可以成为

return elem.strip('[]')

for 循环会很好

for i in sorted_elems:
print(str(i).replace('[', '').replace(']', '').replace("'", "")) 

您可以将 translate() 与删除不需要的字符的转换表一起使用:

removeChars = str.maketrans("","","[']") # 3rd parameter is characters to remove

sorted_elems = ['[abc]', '[xyz]', ['qwe']]
print(str(sorted_elems).translate(removeChars))
abc, xyz, qwe

最新更新