【问题标题】:How to get a list of substrings by using a sliding window iterator如何使用滑动窗口迭代器获取子字符串列表
【发布时间】:2018-04-06 04:41:37
【问题描述】:

我正在尝试从字符串中获取给定长度的子字符串列表。

例如,如果我有一个字符串

word = "PYTHON"

指定子串长度为4,如何获取如下列表?

['PYTH', 'YTHO', 'THON']

这是我的尝试:

size = 4
win = [] 
word = "PYTHON"

i = iter(word)

for x in range(0,size):
    win.append(next(i))
print(win)

for e in i:
    win = win[1:] + [e]            
    print(win)

【问题讨论】:

标签: python string list


【解决方案1】:

您似乎想要sliding window。考虑一下more_itertools third-party tool

import more_itertools as mit


word = "PYTHON"
["".join(w) for w in mit.windowed(word, 4)]
# ['PYTH', 'YTHO', 'THON']

【讨论】:

    【解决方案2】:

    您可以在代码中使用join 操作来打印所需的字符串。示例:-

    size = 4
    win = [] 
    word = "PYTHON"
    final_list = []
    
    i = iter(word)
    
    for x in range(0,size):
        win.append(next(i))
    final_list.append(''.join(win))
    
    for e in i:
        win = win[1:] + [e]            
        final_list.append(''.join(win))
    
    print (final_list)
    
    
    >>['PYTH', 'YTHO', 'THON']
    

    【讨论】:

      【解决方案3】:

      你可以这样做

      size = 4
      win = [] 
      word = "PYTHON"
      
      for i in range(0, len(word)-size + 1):
          win.append(word[i:i+size])
      print(win)
      

      或者使用列表推导作为

      size = 4
      word = "PYTHON"
      
      win = [word[i:i+size] for i in range(0, len(word)-size + 1)]
      print(win)
      

      【讨论】:

        【解决方案4】:

        你可以试试这个方法:

        word = "PYTHON"
        
        print([word[i:i+4] for i in range(0,len(word),1) if len(word[i:i+4])==4])
        

        输出:

        ['PYTH', 'YTHO', 'THON']
        

        或者您也可以尝试递归方法:

        word = "PYTHON"
        
        def recursive_approach(data,window_size,final_result=[]):
            if len(data[:4])==window_size:
                final_result.append(data[:4])
                return recursive_approach(data[1:],4)
            return final_result
        
        
        print(recursive_approach(word,4))
        

        输出:

        ['PYTH', 'YTHO', 'THON']
        

        【讨论】:

          【解决方案5】:

          尝试不使用 [] 并将它们替换为 ""。

              size = 4
              win = [] 
              word = "PYTHON"
          
              i = iter(word)
          
              for x in range(0,size):
                  win.append(next(i))
              print(win)
          
              for e in i:
                 win = win[1:] + "e"            
                 print(win)
          

          【讨论】:

            猜你喜欢
            • 2016-11-25
            • 2011-10-12
            • 2012-10-12
            • 2021-04-14
            • 1970-01-01
            • 1970-01-01
            • 2017-08-08
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多