sorted_elems
列表中有一些元素将被更改为str
,例如:
sorted_elems = ['[abc]', '[xyz]', ['qwe']]
我想删除定义的字符 -[
、]
、'
并打印下面的输出:
所以输出应该看起来像这样:abc
、xyz
、qwe
。
我的解决方案是:
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