簡體   English   中英

如何從列表中查找和刪除具有給定總字母數的字符串對

[英]How to find and remove pairs of strings with a given total letters count from a list

我有一個列表,每個元素都是一個單詞。 在這個列表中,我想找到添加字母數為 20 的單詞對,打印它們並將它們從列表中刪除。

當列表中沒有匹配條件的單詞時,程序應該停止。

這是我想出的代碼,但正如您將看到的,它有很多錯誤,索引超出范圍,我不知道如何修復它,也不知道如何讓程序在那里停止不再有符合條件的詞。

f = open('input.txt', 'r')

words = f.read().split()

c = 0
for word in words:
    c += 1

for i in range(c):
    letterCount = 0
    for letter in words[i]:
        letterCount += 1
    for j in range(i+1, c):
        letterCount2 = 0
        for letter in words[j]:
            letterCount2 += 1
        if letterCount + letterCount2 == 20:
            print(words[i], words[j])
            words.pop(i)
            words.pop(j)

這是我的建議。 您必須使用 len(list) 或 len(word) 來獲取單詞列表的長度,這將使您的生活更輕松。 在下面的代碼中,我們創建了一個 function 來檢查此類單詞對並刪除它們。 我們運行這個 function 直到沒有其他對並且循環停止:

f = open('input.txt', 'r')

words = f.read().split()

def find_pair(l):
    for i in range(len(l)-1):
        for k in range(i, len(l)):
            if len(l[i]+l[k])==20:
                return (i, k)
    return (0,0)

while True:
    x=find_pair(words)
    if x!=(0,0):
        words.pop(x[1])
        words.pop(x[0])
    else:
        break

print(words)

使用break; 滿足條件后退出循環的語句

一個簡單的解決方案,無需更改您的單詞列表:

pairs=[]
for w1 in words:
    for w2 in words:
        if w1 in pairs or w2 in pairs:
            continue
        if w1 != w2 and len(w1) + len(w2) == 20:
            print(w1, w2)
            pairs.append(w1)
            pairs.append(w2)
            break

print(pairs)
print(list(filter(lambda x: x not in pairs, words)))

暫無
暫無

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

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