【问题标题】:How to get consecutive word combinations of n words from a list [closed]如何从列表中获取n个单词的连续单词组合[关闭]
【发布时间】:2021-11-05 01:28:28
【问题描述】:

假设我有一个整数值n 和以下列表

myList = ["This", "is", "a",  "great", "list"]
n = 2

如何将这个列表拆分到一个输出列表中,该输出列表“拆分”myList 到另一个列表中,其中每个元素都是 n 连续单词。像这样

outputList = ["This is", "is a", "a great",  "great list"]

【问题讨论】:

  • 请分享一下你目前尝试过的,看看可以用一个简单的循环完成吗?
  • 到目前为止,我只让它为 n = 1 工作,但我使用的 for 循环不考虑 n。老实说,我是一个机器人,不知道如何处理该任务

标签: python python-3.x string list


【解决方案1】:

您可以将zip 与生成器表达式结合使用:

>>> [" ".join(t) for t in zip(*(myList[i:] for i in range(n)))]
['This is', 'is a', 'a great', 'great list']

对于n = 3

['This is a', 'is a great', 'a great list']

【讨论】:

    【解决方案2】:

    使用嵌套循环。

    因此,您需要在这里做的是使用嵌套循环。外层循环抓取第一个单词,内层循环抓取后面的每个单词。

    所以,是这样的:

    myList = ["This", "is", "a",  "great", "list"]
    n = 2
    
    final = []
    for i in range(len(myList) - n + 1):
      if n>1:
        temp = myList[i]
        for j in range(n-1):
          temp += " " + myList[i+j+1]
        final.append(temp)
      else:
        final.append(myList[i])
    

    执行循环后,我们得到一个 final 等于这个值:

    ['This is', 'is a', 'a great', 'great list']
    

    对于 n=3,我们得到以下列表:

    ['This is a', 'is a great', 'a great list']
    

    【讨论】:

      【解决方案3】:

      以下代码将起作用:-

      myList = ["This", "is", "a",  "great", "list"]
      n = 2
      tempN = n
      
      res = []
      
      for i in range(len(myList)-n+1):
          start, tempRes = myList[i], ""
      
          for j in range(i, len(myList)):
              if tempN>0:
                  if tempN == 1:
                      tempRes += f"{myList[j]}"
                  else:
                      tempRes += f"{myList[j]} "
      
                  tempN -= 1
          else:
              res.append(tempRes)
              tempN = n
      
      print(res)
      

      这里发生的情况是,第一个循环遍历 myList 直到倒数第二个元素,因为最后一个元素在连接后保持单个;并接受一个元素。关于该元素的索引,内部循环迭代n 次,以便连接其n 相邻伙伴。外层if检查退出条件,即n等于0。内层if-else只是格式化字符串,使字符串末尾没有空格。

      【讨论】:

      • @Selcuk 感谢您的关注,Bug 已修复...
      【解决方案4】:

      另一种形式的列表推导/生成器表达式解决方案:

      [" ".join(myList[i:i+n]) for i in range(len(myList)-n+1)]
      

      产生于,例如,n=3:

      ['This is a', 'is a great', 'a great list']
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-10-23
        • 2014-07-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-11-17
        • 1970-01-01
        相关资源
        最近更新 更多