【问题标题】:Python split() function clarificationPython split() 函数说明
【发布时间】:2021-08-13 08:12:07
【问题描述】:

我对 Python 很陌生,我只是想了解一些事情。

我有一堆 txt 文件要打开,其中包含数千个单词,全部由空格分隔,我相信我在下面的代码中已经涵盖了这一点。但我只是想知道如何分解这些行分成 3 块或用户输入的一些 int 块?

来自['perfect', 'dealing', 'crave', 'stirring', 'expedition', 'alexandria', 'vanish', 'dealing', 'crave']

[['perfect', 'dealing', 'crave'], ['stirring', 'expedition', 'alexandria'],['vanish', 'dealing', 'crave']]

甚至回到列表形式

a
b
c

TIA

word_list=[]
filename = "filename.txt"
with open(filename,"r") as file_object:
    for line in file_object:
        word_list=line.split()
        print(word_list)
    return(word_list)

【问题讨论】:

    标签: python list split


    【解决方案1】:

    您可以使用for i in range(0, len(word_list), 3) 以 3 的间隔遍历列表,并使用索引对原始列表进行切片

    new_list = [word_list[i:i+3] for i in range(0, len(word_list), 3)]
    # [['perfect', 'dealing', 'crave'], ['stirring', 'expedition', 'alexandria'], ['vanish', 'dealing', 'crave']]
    

    【讨论】:

      【解决方案2】:

      你不是在更新word_list,而是在写它的值,它应该是这样的。

      word_list=[]
      filename = "filename.txt"
      with open(filename,"r") as file_object:
          for line in file_object:
              word_list.append(line.split()) # notice this
              print(word_list)
          return(word_list)
      
      sub_list_size = 3; # take from user input or as needed
      output = [word_list[i: i+sub_list_size] for i in range(0, len(word_list), sub_list_size)]
      print(output)
      

      【讨论】:

      • 啊,这更有意义。我没有附加,因为我认为它只需要被覆盖!很大的帮助,谢谢
      【解决方案3】:

      使用来自 itertools 配方的 grouper 构造:

      def grouper(iterable, n, fillvalue=None):
          "Collect data into fixed-length chunks or blocks"
          # grouper('ABCDEFG', 3, 'x') --> ABC DEF Gxx"
          args = [iter(iterable)] * n
          return zip_longest(*args, fillvalue=fillvalue)
      

      你的代码是:

      word_list = []
      n = 3
      filename = "filename.txt"
      with open(filename, "r") as file_object:
          for line in file_object:
              word_list.append(grouper(line.split(), n))
      return word_list
      

      【讨论】:

      • 我不知道它存在!谢谢