【问题标题】:split string into multiple lists by a char通过 char 将字符串拆分为多个列表
【发布时间】:2021-01-06 17:34:43
【问题描述】:

我有一个函数返回的字符串,例如:

"& True  True & True  False & False"

我需要编写一个函数,将& 之间的所有元素放在一个列表中并删除它,例如:

[[True, True], [True, False], [False]] 

我该怎么做? 提前致谢!

【问题讨论】:

  • results = mystring.split("&") 将是一个好的开始。
  • 然后对于该列表的每个元素,您可以使用split() 在空白处将其拆分。然后遍历这些字符串并将"True"替换为True,将"False"替换为False
  • 既然已经有很多答案了:[list(map(lambda s: s=='True', entry.split())) for entry in value.split('&') if entry]

标签: python python-3.x string list split


【解决方案1】:

你可以使用拆分

 l = "& True  True & True  False & False"
 result = [j.split() for j in l.split('&') if j!='']
 print(result)

输出

[['True', 'True'], ['True', 'False'], ['False']]

【讨论】:

    【解决方案2】:

    使用正则表达式:

    import re
    s = "& True  True & True  False & False"
    out = [list(map(eval, i.split())) for i in re.findall("&?([^&]+)&?", s)]
    

    给予

    [[True, True], [True, False], [False]]
    

    众所周知,eval 是危险的,所以如果你真的想要布尔值,使用 ast.literal_eval 代替 eval 作为最安全的选择,或者你可以像这样在里面有一个脏 lambda:

    [list(map(lambda x: x == 'True', i.split())) for i in re.findall("&?([^&]+)&?", s)]
    

    【讨论】:

    • eval?真的吗?
    • 不想为固定字符串添加ast.literal_eval
    • 让我们提一下 eval 永远不应该与不受信任的数据一起使用。如果这个字符串是固定的,答案将是print([[True, True], [True, False], [False]]) ;)
    【解决方案3】:

    别忘了将其转换为 bool:

    mystr = "& True  True & True  False & False"
    l = [[s == 'True' for s in t.strip().split()] for t in mystr.strip('&').split('&')]
    >>> l
    [[True, True], [True, False], [False]]
    

    【讨论】:

      【解决方案4】:

      你可以使用string的split方法

      你的字符串.split("&")

      看看这个,对你有帮助。

      https://www.w3schools.com/python/ref_string_split.asp

      【讨论】:

        【解决方案5】:

        使用filtermapsplit 的另一种方法,

        string = '& True True & True False & False'
        required = list(filter(None,map(str.strip, string.split('&'))))
        result = [l.split() for l in required]
        print(result)
        

        结果:

        [['True', 'True'], ['True', 'False'], ['False']]
        

        【讨论】:

        • 这不是过度设计吗?
        • 另外,您不需要将 map 对象转换为 list,直接过滤 map 就可以了:list(filter(None, map(str.strip, s.split('&'))))
        • @sahasrara62 是的,因为我喜欢工程:P。谢谢指出
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-26
        • 2023-01-13
        • 2021-06-27
        • 2020-08-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多