我在python中有一个列表,它是由许多函数生成的。它是这样产生的:
['01', '1.0', '[0.2]']
我想在制作后删除所有不必要的字符。
理想输出:
['01', '1.0', '0.2']
我基本上需要从列表中的最后一个字符串中删除[和]。
更新
list_test = ['01', '1.0', '[0.2]']
[i.strip('[]') if type(i) == str else str(i) for i in list_test]
print(list_test)
这不起作用,因为有和没有产生相同的结果:
['01', '1.0', '[0.2]']
所需的结果是:
['01', '1.0', '0.2']
提供解决方案:
l = ['01', '1.0', '[0.2]']
[i.strip('[0.2]') if type(i) == str else str(i) for i in l]
print(l)
输出:
['01', '1.0', '0.2']
Process finished with exit code 0
答案 0 :(得分:4)
如果你只是需要删除一个字符串周围的可选[
和]
,这个单行应该可以解决问题:
l = [i.strip('[]') for i in l]
使用您的示例
>>> l = ['01', '1.0', '[0.2]']
>>> [i.strip('[]') for i in l]
['01', '1.0', '0.2']
它的作用:它遍历列表的所有字符串,如果它们位于字符串的开头或结尾,则删除任何[
和]
。它还会将]0.2[
转换为0.2
。
<强>更新强>:
我得到
AttributeError: 'int' object has no attribute 'strip'
在这种情况下,你的输入数组中有一个int,这个衬里应该可以解决这个问题:
l = [i.strip('[]') if type(i) == str else str(i) for i in l]
使用int:
的示例>>> l = ['01', '1.0', '[0.2]', 2]
>>> [i.strip('[]') if type(i) == str else str(i) for i in l]
['01', '1.0', '0.2', '2']
它的作用是
[
和]
答案 1 :(得分:1)
如果你可以使用 regex ,你可以从字符串中获取数字:
>>> import re
>>> my_list = ['01', 1.0, [0.2]]
>>> my_nums = re.findall('\d+\.?\d*', repr(my_list))
# ^ ^ convert `list` to `str` representation
# ^ value of `my_nums` > ['01', '1.0', '0.2']
>>> ', '.join(my_nums)
'01, 1.0, 0.2' # <--- Desired result
否则,可以将list
转换为str
,并根据要删除的项目列表从字符串中删除内容。例如:
my_list = ['01', 1.0, [0.2]]
remove_content = ["'", "[", "]"] # Content you want to be removed from `str`
my_str = repr(my_list) # convert list to `str`
for content in remove_content:
my_str = my_str.replace(content, '')
my_str
持有的最终价值为:
>>> my_str
'01, 1.0, 0.2'
答案 2 :(得分:0)
你不需要正则表达式,这个简单的东西会起作用。
(str(['01', 1.0, [0.2]])
.replace('[','')
.replace(']','')
.replace("'",'')
.replace('"',''))
或者,如果你有许多字符,你认为没必要,
chars2remove = '''[]'"'''
s = str(['01', 1.0, [0.2]])
for char in chars2remove:
s = s.replace(char, '')