在 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']
非常基本的问题,但我找不到正确实现它的方法。
我有两个列表:
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']