我要尝试的单词列表很长,如果单词包含特定字符,请将其删除。但是,我认为可行的解决方案不会并且不会删除任何单词
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,我希望将其删除或不添加到其他列表中。我尝试了两种方式。谁能提供有关可能出问题的见解?我很确定我可以使用一些列表理解功能,但是我并不擅长于此。
答案 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']