我想從main_word_list中整理出一個單詞,其中包含來自target_characters的所有字符
main_word_list=['whets', 'beets', 'pelts', 'vests', 'debts', 'welts', 'seeth', 'jests', 'hefts', 'melts', 'zests', 'depth', 'pests', 'meets', 'teeth', 'lefts', 'stets', 'tests', 'wefts', 'felts', 'wests', 'bests', 'belts']
target_characters=['p', 'h', 'd', 'e']
這里只有深度才是正確的答案,因為它在main_word_list中,并且它具有所有 target_characters
uj5u.com熱心網友回復:
您可以通過串列理解來做到這一點:
[w for w in main_word_list if all(c in w for c in target_characters)]
關鍵字all將檢查是否在特定單詞中找到所有字符。
uj5u.com熱心網友回復:
對于一個快速的解決方案(理論上),使用一組標志,最初都是假的,字母表中的每個字符一個。
依次掃描每個單詞,并為每個字符設定相應的標志。完成后,計算為目標字符集設定的標志數。
例如 'whets' -> FFFFTFFTFFFFFFFFFFTTFFTFFF 給出 d: F, e: T, h: T, p: F,因此只有兩個匹配項。
每個單詞的成本等于單詞中的字母數加上目標集的大小。
請注意,您需要在處理下一個單詞之前重置標志。根據標志陣列的表示和字母表的大小,您有兩種選擇
清除所有標志(成本與字母表的大小成正比),
再次掃描單詞以重置所有字母的標志(成本與單詞長度成正比)。
偽代碼:
set= ['d'-'a', 'e'-'a', 'h'-'a', 'p'-'a'] # We work with lowercase
mask= 'FFFFFFFFFFFFFFFFFFFFFFFFFF' # Various representations are possible
# Set the flags
for letter in word:
mask[letter - 'a']= 'T'
# Count the matching flags
if Sum(mask[letter] == 'T' for letter in set) == len(set):
print(word)
# Reset the flags (alternatively, reset the whole mask)
for letter in word:
mask[letter - 'a']= 'F'
uj5u.com熱心網友回復:
此代碼將起作用:
main_word_list= ['whets', 'beets', 'pelts',
'vests', 'debts', 'welts', 'seeth', 'jests',
'hefts', 'melts', 'zests', 'depth', 'pests',
'meets', 'teeth', 'lefts', 'stets', 'tests',
'wefts', 'felts', 'wests', 'bests', 'belts']
target_characters=['p', 'h', 'd', 'e']
req_words = []
counter = 0
for word in main_word_list:
counter = 0
for char in word:
if char in target_characters:
counter =1
if counter >= len(target_characters):
req_words.append(word)
for word in req_words:
print (word)
你會得到depth作為輸出。
基本上,這段代碼的作用是檢查給定單詞中的字符數是否大于或等于 list 的長度target_characters。如果 的長度target_characters大于或等于找到的匹配數,即,if counter >= len(target_characters)則將該特定單詞附加到另一個串列中req_words。的值在最外層回圈的每次迭代之后counter被重置(counter=0),以便main_word_list可以檢查下一個單詞是否匹配。最后,req_words將包含所有具有 . 字符的單詞target_characters。
如有任何疑問,請在評論中問我。
uj5u.com熱心網友回復:
嘗試這個:
# Check every word in main_word_list
for word in main_word_list:
# Check every character in target_characters
for char in target_characters:
# Exit the loop if the character is not in the word
if char not in word:
break
else:
# If no 'break' was encountered (i.e. all characters are in the word)
print(word) # You could also replace this with my_list.append(word)
# and define my_list before the first for loop
或者使用串列理解,您可以使用all:
my_list = [word for word in main_word_list if all(char in word for char in target_characters)]
uj5u.com熱心網友回復:
主要思想是使用python set。
- 將您的目標字符轉換為設定。
- 為串列中的每個單詞創建“設定表示”
- 設定比較 - 瑣碎操作 這里代碼
main_word_list=['whets', '甜菜', '毛皮', '背心', '債務', 'welts', 'seeth', 'jests', 'hefts', 'melts', 'zests', 'depth' , '害蟲', 'meets', 'teeth', 'lefts', 'stets', 'tests', 'wefts', 'felts', 'wests', 'bests', 'belts'] target_characters=['p '、'h'、'd'、'e']
target_characters_set=set(target_characters)
result=[]
for word in main_word_list:
word_set=set()
for char in word:
word_set.add(char)
if len(target_characters_set-word_set)==0:
result.append(word)
uj5u.com熱心網友回復:
我是這樣做的,如果可以,請告訴我:)
def check(word, list):
for c in list:
if c not in word:
return False
return True
final = []
for word in main_word_list:
if check(word,target_characters):
final.append(word)
print(final)
uj5u.com熱心網友回復:
考慮使用集合來評估目標字符集是否是每個單詞的子集:
>>> main_word_list=['whets', 'beets', 'pelts', 'vests', 'debts', 'welts', 'seeth', 'jests', 'hefts', 'melts', 'zests', 'depth', 'pests', 'meets', 'teeth', 'lefts', 'stets', 'tests', 'wefts', 'felts', 'wests', 'bests', 'belts']
>>> target_characters=['p', 'h', 'd', 'e']
>>> target_set = set(target_characters)
>>> [w for w in main_word_list if target_set <= set(w)] # comprehension
['depth']
>>> list(filter(target_set.issubset, main_word_list)) # functional
['depth']
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/487384.html
