【问题标题】:Python:- Convert a string into listPython:- 将字符串转换为列表
【发布时间】:2015-04-14 11:49:54
【问题描述】:

我有一个像groups(1,12,23,12) 这样的字符串,我想把它转换成一个像[1,12, 23, 12] 这样的列表。

我试过这段代码,但输出并不例外。

str = 'groups(1,12,23,12)'
lst = [x for x in str]

请告诉我...!

【问题讨论】:

    标签: python regex string list types


    【解决方案1】:

    您可以使用re.findall 方法。

    并且不要使用str 作为变量名。

    >>> import re
    >>> s = 'groups(1,12,23,12)'
    >>> re.findall(r'\d+', string)
    ['1', '12', '23', '12']
    >>> [int(i) for i in re.findall(r'\d+', s)]
    [1, 12, 23, 12]
    

    没有正则表达式,

    >>> s = 'groups(1,12,23,12)'
    >>> [int(i) for i in s.split('(')[1].split(')')[0].split(',')]
    [1, 12, 23, 12]
    

    【讨论】:

    • 使用字符串作为变量名也是个坏主意:-)
    • 有一个内置的python模块名称字符串。所以绝对是个坏主意。试试import string
    【解决方案2】:

    对于没有正则表达式的方法

    >>> a = "groups(1,12,23,12)"
    >>> a= a.replace('groups','')
    >>> import ast
    >>> list(ast.literal_eval(a))
    [1, 12, 23, 12]
    

    参考:

    【讨论】:

    • 相对于正则表达式的优势在于它可以处理任何类型的数字,例如。 1e41.990x9 等,它甚至适用于任何其他类型的字符串、dict 等我认为这是最好的方法,一般规则是尽可能避免使用正则表达式
    【解决方案3】:
    1. 使用正则表达式从输入字符串中查找数字。
    2. 使用map方法将字符串转换为整数。

    例如

    >>> import re
    >>> a = 'groups(1,12,23,12)'
    >>> re.findall("\d+", a)
    ['1', '12', '23', '12']
    >>> map(int, re.findall("\d+", a))
    [1, 12, 23, 12]
    

    【讨论】:

      【解决方案4】:
      string = "groups(1,12,23,12)".replace('groups(','').replace(')','')
      outputList = [int(x) for x in string.split(',')]
      

      【讨论】:

        猜你喜欢
        • 2016-11-09
        • 1970-01-01
        • 2023-03-16
        • 2017-11-15
        • 1970-01-01
        • 2014-08-06
        • 1970-01-01
        • 1970-01-01
        • 2020-01-03
        相关资源
        最近更新 更多