簡體   English   中英

Python - 匹配列表中的單詞字母

[英]Python - match letters of words in a list

我正在嘗試創建一個簡單的程序,用戶輸入幾個字母

輸入字母:abc

然后我想要查看列表中匹配的單詞列表以及包含“a”,“b”和“c”的單詞。

這是我到目前為止沒有運氣的嘗試

for word in good_words: #For all words in good words list
    for letter in letters: #for each letter inputed by user
        if not(letter in word):
            break
    matches.append(word)

如果你想要單詞里面的all字母:

[word for word in good_words if all(letter in word for letter in letters)]

你的代碼的問題是內部循環內部的break Python沒有一個允許一次打破多個循環的結構(你想要的)

您可以使用Set或FrozenSet改進spee

如果您查看該文檔,它會提到測試成員資格的情況:

set對象是不同的可哈希對象的無序集合。 常見用途包括成員資格測試 ,從序列中刪除重復項,以及計算數學運算,如交集,並集,差異和對稱差異。

列表推導肯定是要走的路,但只是為了解決OP在他的代碼中遇到的問題:

您的break語句只會從最內層循環中斷開。 因此,該詞仍附加到matches 一個快速解決方法是利用python的for... else構造:

for word in good_words:
    for letter in letters:
        if letter not in word:
            break
    else:
        matches.append(word)

在上面的代碼, else只有在循環允許運行,一路過關斬將執行。 break語句完全退出循環,並且不執行matches.append(..)

import collections

我首先計算單詞列表中字母的出現次數。

words_by_letters = collections.defaultdict(list)
for word in good_words:
    key = frozenset(word)
    words_by_letters[key].append(word)

然后,這只是尋找具有特定字母出現的單詞的問題。 這有希望比單獨檢查每個單詞更快。

subkey = set(letters)
for key, words in words_by_letters.iteritems():
    if key.issuperset(subkey):
        matches.extend(words)

如果你想跟蹤字母重復,你可以通過從collections.Counter構建一個鍵來做類似的事情。

暫無
暫無

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

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