在 Python 中删除列表

新手上路,请多包涵

我在 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

原文由 JAM 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 517
2 个回答

如果您只需要删除字符串周围的可选 [] ,这个单行代码应该可以解决问题:

 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']

它的作用是

  • 仅从字符串中剥离 []
  • 将非字符串的所有内容转换为字符串

原文由 hansaplast 发布,翻译遵循 CC BY-SA 3.0 许可协议

如果您可以使用 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'

原文由 Moinuddin Quadri 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏