Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如果变量不在列表中==False,则返回空列表_Python_List - Fatal编程技术网

Python 如果变量不在列表中==False,则返回空列表

Python 如果变量不在列表中==False,则返回空列表,python,list,Python,List,我需要制作一个程序,该程序接受给定的字母字符串,并返回给定列表中只能使用这些字母生成的所有单词。为此,我使用了两个“For”循环,一个用于列表中的单词,另一个用于每个单词中的字母 现在,为了获得除了给定的字母以外什么都不能做的单词,我使用了以下方法: def combinacion_palabras(lista_palabras,letras): palabras_correctas = [] letras_correctas = [] for i in letras:

我需要制作一个程序,该程序接受给定的字母字符串,并返回给定列表中只能使用这些字母生成的所有单词。为此,我使用了两个“For”循环,一个用于列表中的单词,另一个用于每个单词中的字母

现在,为了获得除了给定的字母以外什么都不能做的单词,我使用了以下方法:

def combinacion_palabras(lista_palabras,letras):
    palabras_correctas = []
    letras_correctas = []
    for i in letras:
        letras_correctas.append(i)
    for p in lista_palabras:
        for c in p:
            if c not in letras_correctas == False:
                palabras_correctas.append(p)

    return palabras_correctas
其中lista_palabras是给定单词的列表,letras是包含可用字母的字符串。我希望它返回一个列表,其中包含lista_palabras中的所有单词,这些单词仅由字符串letras中的字母组成,但它返回的却是一个空列表。我犯了什么错误?提前感谢。

请考虑以下示例:

>>> L = ['a', 'b']
>>> 'a' not in L
False
>>> 'a' not in L == False
False
>>> ('a' not in L) == False
True
优先顺序使
L==False
优先


如果您想确定列表中是否有一个项目,只需在letras_correctas中选择c:

您的意思是这样的吗

def combinacion_palabras(lista_palabras, letras):
    return [palabra for palabra in lista_palabras if set(palabra) <= set(letras) ]

palabras = ['tomo', 'tomas', 'toma', 'tomamos', 'toman', 'mata']

print(combinacion_palabras (palabras, 'tom') )
print(combinacion_palabras (palabras, 'atoms') )
print(combinacion_palabras (palabras, 'tma') )
def combinacion_palabras(list_palabras, letras):
    return [palabra for palabra in list_palabras if sorted(palabra) == sorted(letras) ]

palabras = ['tomo', 'tomas', 'toma', 'tomamos', 'toman', 'mata']

print(combinacion_palabras (palabras, 'otom') )
print(combinacion_palabras (palabras, 'atoms') )
print(combinacion_palabras (palabras, 'tama') )

如果我给了你
c
o
f
e
,你能把
coffee
这个词做出来吗?你的算法能解释吗?你不需要字母循环。直接使用
letras
就可以了……我已经解决了这个问题,尽管我选择了不同的路线。无论如何,谢谢你们的帮助。如果有人好奇的话,代码如下:
def combinacion_palabras(lista_palabras,letras):palabras_correctas=[]letras_correctas=list(letras)for p in lista_palabras:k=''for c in p:If c in letras_correctas:k+=c If len(k)=len(p):palabras_correctas.append(p)return palabras_correctas
值得一提的是,即使使用此修复,算法仍然会出错(它将返回一个列表,每个单词重复的次数与它的有效字母数相同)。理想的解决方案可能需要调用
any
all
,调用中包含生成器表达式,但这对于提问者的家庭作业来说可能太高级了。用简单的循环来解决它是可能的,尽管不是很Python(尽管可能值得学习,因为大多数其他语言需要比Python更难看的东西)。