【问题标题】:Python Split a text into listPython将文本拆分为列表
【发布时间】:2018-08-25 00:32:08
【问题描述】:

我要转换这个

1:a,b,c
2:d,e,f

进入这个

[[1, ['a', 'b', 'c']],[2, ['d', 'e', 'f']]]

我的代码

letters = open("letters.txt")
alist = []
for line in favmovies:
    line = line.strip().split(":")
    line[0] = int(line[0])
    alist.append(line)

但它却给出了这个

[[1, 'a,b,c'], [2, 'd,e,f']]

谁能提供解决方案?

【问题讨论】:

    标签: python string list integer


    【解决方案1】:

    这是一种循环方法:

    print([list(map(lambda x: x.split(','), i.strip().split(':'))) for i in open('file.txt','r')])
    

    输出:

    [[['1'], ['a', 'b', 'c']], [['2'], ['d', 'e', 'f']]]
    

    【讨论】:

      【解决方案2】:

      你可以使用re来浓缩解决方案:

      import re
      data = [re.split('\W+', i.strip('\n')) for i in open("letters.txt")]
      last_data = [[int(a), b] for a, *b in data]
      

      输出:

      [[1, ['a', 'b', 'c']], [2, ['d', 'e', 'f']]]
      

      【讨论】:

        【解决方案3】:

        这可以通过list comprehension 来完成,例如:

        代码:

        data = [[int(x[0]), [y.strip() for y in x[1].split(',')]]
                for x in (line.split(':') for line in letters)]
        

        测试代码:

        letters = ['1:a, b, c', '2: d, e, f']
        data = [[int(x[0]), [y.strip() for y in x[1].split(',')]]
                for x in (line.split(':') for line in letters)]
        print(data)
        

        结果:

        [[1, ['a', 'b', 'c']], [2, ['d', 'e', 'f']]]
        

        【讨论】:

        • 我喜欢你的解决方案,因为这个问题说明了列表理解有什么好处,并且因为你保留了 OP 帖子的逻辑(正如我在回答中所做的那样),但说明了它如何以 python 方式合并。这里有一个微妙之处:您提供了一种替代方法,但您的替代方法保持了原始逻辑。 (我认为这是理想的。)
        【解决方案4】:

        这里

        letters=open("letters.txt").read().split("\n")
        output_list=[]
        for el in letters:
            output_list.append([el.split(":")[0],el.split(":")[1].split(",")])
        

        【讨论】:

          【解决方案5】:

          只需用“,”分割数组的第二部分。

          letters = open("letters.txt")
          alist = []
          for line in favmovies:
              line = line.strip().split(":")
              line[0] = int(line[0])
              line[1] = line[1].split(',')
              list.append(line)
          

          这给了我,你的例子:

          [1, ['a', 'b', 'c']] 
          [2, ['d', 'e', 'f']]
          

          它保留了原始代码的总体格式。

          【讨论】:

          • @Hal 当然,希望这会有所帮助!如果这回答了您的问题,请单击绿色复选标记将其标记为正确。谢谢!
          猜你喜欢
          • 2017-02-08
          • 2012-03-10
          • 1970-01-01
          • 1970-01-01
          • 2021-07-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多