[英]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.