簡體   English   中英

檢查后將字符串追加到列表

[英]Append a string to a list after checking

我正在寫一個小型游戲,它只需要一個東西,當用戶輸入字符串時,它應該檢查單詞是否由給定的字母組成,然后應附加到新列表中。

user_input = raw_input("Please enter a word: ")
ls = ["a", "f" , "x" , "u"]
user_list = []

for i in user_input:
    if i in ls:
        user_list.append(user_input)

但是問題是,如果匹配任何字符串,整個單詞都將附加到列表中。 就像fun一樣, aim也會添加到列表中。

我會用set 您允許的字母可以是一個集合,然后根據用戶的單詞來進行集合。 如果用戶指定的集合是字母集的子集,那么您將知道該單詞僅由所需字母中的字符組成。

user_input = raw_input("Please enter a word: ")
ls = set('afxu')
user_list = []

if set(user_input).issubset(ls):
    user_list.append(user_input)

您應該使用布爾值,並且僅當輸入中的所有字母都在字典中時才添加:

user_input = raw_input("Please enter a word: ")
ls = ["a", "f" , "x" , "u"]
user_list = []
inDict = True

for i in user_input:
    if not(i in ls):
        inDict = False
        break
if(inDict):    
    user_list.append(user_input)

使用集的條件的另一個答案是

user_input = raw_input("Please enter a word: ")
ls = ["a", "f" , "x" , "u"]
user_list = []


if set(list(user_input)).issubset(set(ls)):
    user_list.append(user_input)

您需要檢查user_input每個字母是否在允許的字母列表中(您可能應該將其重命名為letter_list或其他名稱,因為ls是IPython中的保留字)。

一種實現方法是對lambda函數使用reduce

if reduce(lambda a, b: a and b, [letter in ls for letter in user_input]):
    user_list.append(user_input)

您可以檢查user_input中的所有字符是否都在ls

if all(char in ls for char in user_input) 

i in ls將為True或False,如果我們在ls中未命中一個字符,則循環將短路並返回False,如果user_input中的所有字符都在ls中,則它將返回True並附加該單詞​​。

為單個單詞創建一個列表並追加並沒有多大意義,但是如果您確實需要,可以使用列表組合:

user_list  = [user_input for i in user_input  if all(char in ls for char in user_input)]

如果您實際上想要多個單詞,則可以拆分並檢查每個單詞:

user_list  = [word for word in user_input.split() if all(char in ls for char in word)]

使用您自己的代碼,您必須首先檢查每個字符,並且僅在檢查完每個字符之后才追加,但使用all是一種更好的方法。

對於輸入大的ls ,設置ls = {"a", "f" , "x" , "u"}會是一種更有效的方法,因為設置查找為0(1),但對於小尺寸的輸入則不會做任何事情真正的差異

暫無
暫無

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

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