Python 如何获得没有元音的单词列表?
对于有元音的单词来说,输出是很好的,但是我正在努力找到一种方法来从列表中输出没有元音的单词。提前谢谢你的帮助Python 如何获得没有元音的单词列表?,python,list,Python,List,对于有元音的单词来说,输出是很好的,但是我正在努力找到一种方法来从列表中输出没有元音的单词。提前谢谢你的帮助 alien_names = ['stena', 'venah', 'blyhp', 'spiuy', 'elbas', 'wynts', 'ergez'] print("Alien Name List is: ",alien_names) vowel = ['a','e','i','o','u'] alien_vowels = [word for word in a
alien_names = ['stena', 'venah', 'blyhp', 'spiuy', 'elbas', 'wynts', 'ergez']
print("Alien Name List is: ",alien_names)
vowel = ['a','e','i','o','u']
alien_vowels = [word for word in alien_names if any(v in word for v in vowel)]
print("Alien name list with names that include vowels: ",alien_vowels)
#works as expected
vowset = set(vowel)
for word in alien_names:
if word in alien_names != vowel:
print(word)
#desired output: "blyph", "wynts"
#actual output: all names
谢天谢地,做你想做的事真是太容易了。只需将
any
替换为not any
:
alien_no_vowels = [word for word in alien_names if not any(v in word for v in vowel)]
# output: ['blyhp', 'wynts']
Random Davis已经提供了一个很好的答案,下面是一些不同的代码,这些代码更接近您的尝试,并且对于初学者来说更容易阅读和理解:
alien_names = ['stena', 'venah', 'blyhp', 'spiuy', 'elbas', 'wynts', 'ergez']
vowels = ['a','e','i','o','u']
alienNoVowels=[]
for name in alien_names:
hasVowel=False
for vowel in vowels:
if vowel in name:
hasVowel=True
if not hasVowel: #same as "if hasVowel==False"
alienNoVowels+=[name]
保留您的代码,您只需检查
alien_names
中的哪个单词不在alien_元音中
:
alien_names = ['stena', 'venah', 'blyhp', 'spiuy', 'elbas', 'wynts', 'ergez']
print("Alien Name List is: ", alien_names)
vowel = ['a', 'e', 'i', 'o', 'u']
alien_vowels = [word for word in alien_names if any(v in word for v in vowel)]
print("Alien name list with names that include vowels: ", alien_vowels)
#works as expected
for word in alien_names:
if word not in alien_vowels:
print(word)
输出:
使用
set.isdisjoint
:
>>> *filter(set(vowel).isdisjoint, alien_names),
('blyhp', 'wynts')
下面是使用
set.intersection
执行此操作的简单方法。有趣的是,在过去7年的每次面试中,我都会把这个问题作为面试问题,看看应聘者使用了多少for
循环
alien_names = ['stena', 'venah', 'blyhp', 'spiuy', 'elbas', 'wynts', 'ergez']
vowel = ['a','e','i','o','u']
[i for i in alien_names if set(i).intersection(vowel)==set()]
#Or as @superb rain remarked,
#[i for i in alien_names if set(i).isdisjoint(vowel)]
可能有点长)但效率很高;)
编辑-谢谢我们应该将
如果名称中的x替换为\u元音:pass
替换为如果名称中的x不是\u元音:
,这是旧代码,在这7年里,没有人告诉过你isdisjoint
?:-PI除了以不同的方式编写相同的内容外,看不出它带来了什么新的东西:)它本身更短,允许更短的使用(如我的回答中所示),而且更高效(它在第一个公共元素处停止,而不是总是计算整个交集)。是的,虽然我问的问题是一个有点变化,这将需要交叉口。无论如何,谢谢你的建议。一般来说,我不会做一个带通行证的if
条件,而是使用if not条件:
。在这种情况下,只写如果x不在名称中,则用_元音:
似乎是更好的方法。@HilbertB,如果x不在名称中,则用_元音:
将更具可读性,依我看。@JustinEzequiel我可以发誓PEP 8也更喜欢这样,但显然我把它与不是
(它更喜欢不是…是
)@JustinEzequiel至于可读性,我同意,我只是习惯性地把布尔的否定放在任何给定语句的开头。@hilbertly,谢谢!
alien_names = ['stena', 'venah', 'blyhp', 'spiuy', 'elbas', 'wynts', 'ergez']
vowel = ['a','e','i','o','u']
[i for i in alien_names if set(i).intersection(vowel)==set()]
#Or as @superb rain remarked,
#[i for i in alien_names if set(i).isdisjoint(vowel)]
['blyhp', 'wynts']