【问题标题】:Strip a list in Python [closed]在Python中删除一个列表[关闭]
【发布时间】:2017-01-05 20:34:32
【问题描述】:

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

【问题讨论】:

  • 向我们展示您当前的代码
  • 这是我的代码。我已经获得了顶部列表,需要生成底部输出。
  • 那不是代码,那是输入输出,你自己试过什么把输入变成输出?
  • 我知道你在奇怪的情况下会遇到一个“混合包”的价值观,你想将它们标准化,对吗?为什么第一项是01 而不是1
  • @JAM 从您提出问题的方式和您面临的那种问题来看,您似乎是一个编程新手,并且负责接管别人的代码。如果这个假设是正确的:这是一个巨大的机会和接受它的荣誉。我建议深入研究 python(here 是一些建议或在 codeschool 上做python lectures

标签: python list python-3.x


【解决方案1】:

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

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

它的作用就是它

  • 仅从字符串中去除 []
  • 将不是字符串的所有内容转换为字符串

【讨论】:

  • @JAM 确认[i.strip('[]') if type(i) == str else str(i) for i in l] 在 Python 2 中也给出了预期的结果
【解决方案2】:

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

【讨论】:

  • 这很好用。我将如何将它们作为单独的项目保存,即:'01'、'1.0'、'0.2'
  • @JAM 在使用 regex 的第一种方法中,my_nums 拥有您想要的值。在第二种方法中,您需要将my_str 拆分为my_str .split(', ')
  • 我已经编辑了问题以使其更清楚。我需要这三个项目作为列表中的单独项目。每个都是一个 str 但我需要从最后一项中删除 [ 和 ]。
  • 需要将三个单独的字符串包装在某些数据结构中,即listtuple。要么是单个字符串,要么是字符串列表/元组
  • 对不起,我又编辑了。我对此很陌生。我只需要从第三项中删除 [ 和 ],但我似乎无法做到这一点。
【解决方案3】:

你不需要正则表达式,这么简单的东西就可以了。

(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, '')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 2013-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-20
    • 2021-08-26
    相关资源
    最近更新 更多