在 Python 的两个不同列表中查找彼此包含的子字符串

Finding substrings that contain each other in two different lists in Pytyhon

非常基本的问题,但我找不到正确实现它的方法。

我有两个列表:

vowels = ['a', 'e', 'i', 'o', 'u']

usernames = ['example1', 'zzzzz23', 'eeeee43', 'llllll5', 'pppapp1', 'wwsd0']

我想从 usernames 中提取所有没有 vowels 的元素。

我试过了:

usernames_without_vowels = []
for username in usernames:
  if str(vowels) not in username:
    usernames_without_vowels.append(username)
  else: pass
print(usernames_without_vowels)

输出 1:

>> ['example1', 'zzzzz23', 'eeeee43', 'llllll5', 'pppapp1', 'wwsd0']

如您所见,它打印了整个 usernames 列表,因为它似乎也没有查找子字符串。

然后我尝试按如下方式压缩两个列表:

usernames_without_vowels = []
for username,vowel in zip(usernames,vowels):
  if str(vowels) not in str(username):
    usernames_without_vowels.append(username)
  else: pass
print(usernames_without_vowels)

但是,话又说回来了: 输出 2:

>> ['example1', 'zzzzz23', 'eeeee43', 'llllll5', 'pppapp1']

它打印了整个 usernames 列表,除了最后一个值:wwsd0.

也尝试过:

usernames_without_vowels = [username for username in usernames if str(vowels) not in username]
print(usernames_without_vowels)

输出3: >> ['example1', 'zzzzz23', 'eeeee43', 'llllll5', 'pppapp1', 'wwsd0']

我想获取所有 vowels 的每个字符串都不存在的用户名,但找不到方法。

预期输出:

>> ['zzzzz23', 'llllll5', 'wwsd0']

解决方案

按照@Helios 的解决方案,由以下人员完成:

username_without_vowels = [u for u in usernames if not any([v in u for v in vowels])]

简单且(非常)有效。

感谢大家的帮助!

[u for u in usernames if not any(v in u for v in vowels)]

编辑:

已更新以包含@cglacet 评论

给这只猫蒙皮的方法有很多种,一种方法是使用set intersection并过滤掉所有具有这种交集结果的结果。

vowels = set(vowels)

[user for user in usernames if len(vowels.intersection(user)) == 0]

# OR

[user for user in usernames if not vowels.intersection(user)]

两者都产生

> ['zzzzz23', 'llllll5', 'wwsd0']