【问题标题】:Nested Lists, Python from bash Output嵌套列表,来自 bash 输出的 Python
【发布时间】:2018-12-30 12:17:10
【问题描述】:

我们如何通过去掉终端输出来创建一个嵌套列表?

例如:我正在查询终端以获取一些输出(在这种情况下,它与 Yarn 有关)

import subprocess    
outputstring=subprocess.check_output("yarn application -list | grep " + user, shell=True)    
mylist = (re.split("[\t\n]+",outputstring))=

这会在 Yarn 上运行的每个作业的每一行产生一个输出。 例如:

line1 = a,b,c,d,e
line2 = f,g,h,i,j
line3 = k,l,m,m,o

我可以从这个输出中创建一个列表,但是作为一个列表,所有单词都是逗号分隔的值,比如

mylist = [a,b,c,d,e,f,g,h,i,j,k,l,m,n,o] using the regex above.

但需要创建如下列表:

mylist = [[a,b,c,d,e], [f,g,h,i,j], [k,l,m,n,o]] 

即:

mylist = [[line1],[line2],[line3]]

谁能建议如何实现这一点?

我目前使用的正则表达式是:

mylist = (re.split("[\t\n]+",outputstring))

【问题讨论】:

    标签: python regex list


    【解决方案1】:

    试试这个列表理解:

    a="""a,b,c,d,e
    f,g,h,i,j
    k,l,m,m,o"""
    mylist=[e.split(",") for e in a.split("\n")]
    

    【讨论】:

      【解决方案2】:

      你不能这样做吗?

      my_list = [line1.split(','), line2.split(','), line3.split(',')]
      

      或者这个

      initial_list = []
      
      initial_list.append(line1)
      initial_list.append(line2)
      initial_list.append(line3)
      
      final_list = [x.split(',') for x in initial_list]
      

      我知道你肯定不止有 3 行,但如果你可以用你的输出做 ["a,b,c,d,e,f,g,h,j,k,l"] ,也许你可以也这样做。

      【讨论】:

        【解决方案3】:

        您也可以使用map 函数:

        output = """a,b,c,d,e
        f,g,h,i,j
        k,l,m,m,o"""
        
        output = list(map(lambda i: i.split(','), output.split('\n')))
        print(output)
        

        输出:

        [['a', 'b', 'c', 'd', 'e'], ['f', 'g', 'h', 'i', 'j'], ['k', 'l', 'm', 'm', 'o']]
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-12-03
          • 1970-01-01
          • 1970-01-01
          • 2021-02-11
          • 1970-01-01
          • 2020-09-07
          相关资源
          最近更新 更多