【问题标题】:how do you split a string to create nested list?如何拆分字符串以创建嵌套列表?
【发布时间】:2023-03-30 01:03:01
【问题描述】:

你会如何分割一个字符串

'1,55,6,89,2|7,29,44,5,8|767,822,999'

在两个分隔符 ',''|' 上,这样您就有一个包含以下值的列表:

[[1, 55, 6, 89, 2], [7, 29, 44, 5, 8], [767, 822, 999]]

【问题讨论】:

    标签: python string list split


    【解决方案1】:

    列表推导式是完成此任务的最简洁方式。

    >>> s = '1,55,6,89,2|7,29,44,5,8|767,822,999'
    >>> [[int(x) for x in ss.split(',')] for ss in s.split('|')]
    [[1, 55, 6, 89, 2], [7, 29, 44, 5, 8], [767, 822, 999]]
    

    【讨论】:

    • 啊,Stack Overflow 上经典的“西部最快枪”奖励。
    【解决方案2】:
    my_data = [x.split(',') for x in input_string.split('|')]
    

    【讨论】:

      【解决方案3】:
      import re
      
      
      regx = re.compile('(\A)|(\|)|(\Z)')
      
      def repl(mat, di = {1:'[[', 2:'],[', 3:']]'} ):
          return di[mat.lastindex]
      
      ss = '1,55,6,89,2|7,29,44,5,8|767,822,999'
      
      my_data = eval( regx.sub(repl,ss) )
      
      print my_data[1]
      print my_data[1][2]
      

      结果

      [7, 29, 44, 5, 8]
      44
      

      我知道:有些人会尖叫不使用 eval()

      编辑

      ss = '1,55,6,89,2|7,29,44,5,8|767,822,999' 
      my_data = eval( ss.replace('|','],[').join(('[[',']]')))
      

      【讨论】:

      • 是的,我们会尖叫不要使用eval,尤其是因为它完全没有必要。
      • 这不是 eval() 是不必要的,它是正则表达式。 - 顺便说一句,我有一个不使用 eval() 的想法:exec( regx.sub(repl,ss) )di = {1:'my_data = [[', 2:'],[', 3:']]'}!噗噗噗
      【解决方案4】:
      my_data = [map(int, line.split(',')) for line in input_string.split('|')]
      

      【讨论】:

      • 请格式化您的代码,并考虑map 是否真的与内部列表理解有足够的差异,值得额外的答案。
      猜你喜欢
      • 1970-01-01
      • 2014-04-26
      • 2015-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-17
      • 1970-01-01
      相关资源
      最近更新 更多