簡體   English   中英

如何從列表中獲取n個單詞的連續單詞組合

[英]How to get consecutive word combinations of n words from a list

假設我有一個整數值n和以下列表

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

如何在輸出列表中拆分此列表,該列表將myList “拆分”為另一個列表,其中每個元素都是n個連續單詞。 像這樣

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

使用嵌套循環。

因此,您需要在這里做的是使用嵌套循環。 外循環獲取第一個單詞,內循環獲取每個后續​​單詞。

所以,像這樣:

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']

您可以將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']

以下代碼將起作用:-

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只是格式化字符串,以便字符串末尾沒有空格。

列表推導式/生成器表達式的另一種形式解決方案:

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

例如,產生n=3

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM