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

时间:2013-10-04 03:33:35

标签: python list

我需要制作一个程序,它接受一个给定的字母串并返回给定列表中只能用这些字母制作的所有单词。为此,我使用了两个“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中的字母组成,而是返回一个空列表。我犯了什么错误?提前谢谢。

2 个答案:

答案 0 :(得分:2)

考虑这个例子:

>>> L = ['a', 'b']
>>> 'a' not in L
False
>>> 'a' not in L == False
False
>>> ('a' not in L) == False
True

优先顺序使L == False先行。

如果您想确定列表中是否有项目,请执行if c in letras_correctas:

答案 1 :(得分:0)

你的意思是这样吗?

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') )