从列表中删除包含某些字符的单词

时间:2020-01-02 05:54:25

标签: python python-3.x list

我要尝试的单词列表很长,如果单词包含特定字符,请将其删除。但是,我认为可行的解决方案不会并且不会删除任何单词

l3 = ['b', 'd', 'e', 'f', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y']


firstcheck = ['poach', 'omnificent', 'aminoxylol', 'teetotaller', 'kyathos', 'toxaemic', 'herohead', 'desole', 'nincompoophood', 'dinamode']

validwords = []

for i in l3:
    for x in firstchect:
        if i not in x:
            validwords.append(x)
            continue
        else:
            break

如果firstcheck中的某个单词的字符来自l3,我希望将其删除或不添加到其他列表中。我尝试了两种方式。谁能提供有关可能出问题的见解?我很确定我可以使用一些列表理解功能,但是我并不擅长于此。

4 个答案:

答案 0 :(得分:1)

可接受的答案使用np.sum,这意味着导入一个巨大的数值库来执行Python内核可以轻松完成的简单任务:

validwords = [w for w in firstcheck if all(c not in w for c in l3)]

答案 1 :(得分:0)

您可以使用列表理解:

import numpy as np
[w for w in firstcheck if np.sum([c in w for c in l3])==0]

似乎所有单词都包含来自l3的至少1个字符,并且上面的输出是一个空列表。

如果firstcheck的定义如下:

firstcheck = ['a', 'z', 'poach', 'omnificent']

代码应输出:

['a', 'z']

答案 2 :(得分:0)

啊,代码中有一些错误,其他都很好:

l3 = ['b', 'd', 'e', 'f', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y']


firstcheck = ['aza', 'ca', 'poach', 'omnificent', 'aminoxylol', 'teetotaller', 'kyathos', 'toxaemic', 'herohead', 'desole', 'nincompoophood', 'dinamode']

validwords = []
flag=1
for x in firstcheck:
    for i in l3:
        if i not in x:
            flag=1
        else:
            flag=0  
            break
    if(flag==1):
        validwords.append(x)   

print(validwords)

因此,这里的第一个错误是for loops,我们需要先遍历单词,然后遍历l3,以避免元素的重新读法。

接下来,由于存在错误,“ firstcheck中的x”中的firstcheck拼写错误。

此外,我添加了一个标志,以便如果标志值为1,它将在有效字中添加元素。 为此,请检查我是否将新元素添加为'aza' and 'ca',由于它现在将正确的o / p显示为'aza'和'ca'。

希望这对您有所帮助。

答案 3 :(得分:0)

如果要避免所有循环等,可以直接使用re

import re
l3 = ['b', 'd', 'e', 'f', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y']
firstcheck = ['azz', 'poach', 'omnificent', 'aminoxylol', 'teetotaller', 'kyathos', 'toxaemic', 'herohead', 'desole', 'nincompoophood', 'dinamode']

# Create a regex string to remove.
strings_to_remove = "[{}]".format("".join(l3))
validwords = [x for x in firstcheck if re.sub(strings_to_remove, '', x) == x]
print(validwords)

输出:

['azz']