检查后将字符串附加到列表中

时间:2015-07-14 20:56:32

标签: python list python-2.7

我正在编写一个小游戏,只需要一个用户输入字符串的东西,它应该检查这个单词是否来自给出的字母,然后它应该附加到一个新列表。

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会附加到列表中。

5 个答案:

答案 0 :(得分:1)

我会使用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)

答案 1 :(得分:0)

您应该使用布尔值,只有在输入中的所有字母都在您的字典中时才添加:

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)

答案 2 :(得分:0)

使用集合的条件的另一个答案是

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)

答案 3 :(得分:0)

您需要检查user_input中的每个字母是否在您允许的字母列表中(您应该将其重命名为letter_list或其他内容,因为ls是IPython中的保留字)。

执行此操作的一种方法是将reducelambda函数一起使用:

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

答案 4 :(得分:0)

您可以查看user_input中的ls中的字符all是否if all(char in ls for char in user_input)

i in ls

user_list = [user_input for i in user_input if all(char in ls for char in user_input)] 将评估为True或False,如果我们点击不在ls中的char,则循环将短路并返回False,如果user_input中的所有chars都在ls中它将返回True并且该单词将是追加。

创建单个单词列表并附加没有多大意义,但如果你真的想要它,你可以使用列表comp:

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

如果您实际上想要多个单词,那么您可以拆分并检查每个单词:

ls

使用您自己的代码,您必须先检查每个字符,并且只检查每个字符后添加,但使用all是一个更好的方法。

对于大输入ls = {"a", "f" , "x" , "u"},集合#!/bin/bash for r in 1 2; do ls -lAR / 2> /dev/null | grep '^d' > run${r}.txt 1> out${r}.txt done diff -Nura out1.txt out2.txt rm -f out1.txt out2.txt 将是一种更有效的方法,因为集合查找为0(1)但对于小输入大小,它不会产生任何实际差异