如何删除列表中含「.」但非「.com」组成部分的元素?列表推导式出错如何解决
问题原因
你原有代码的问题主要出在两点:
- 判断逻辑完全不匹配需求:
x != "."是判断整个邮箱字符串是否等于单个字符.,和你要过滤「除.com外包含点」的规则完全无关 - 变量名不匹配:你定义的列表变量是
value,但列表推导式里遍历的是email,如果没有提前做变量赋值映射,也会导致结果不符合预期
正确实现
核心思路
先确认邮箱以.com结尾,再移除最后4位.com后缀,检查剩余的字符串中是否包含.,不包含的才保留。
代码示例
# 原始列表 value = ["Jane.Doe@gmail.com", "John.Doe@gmail.com", "JaneDoe@gmail.com"] # 列表推导式实现过滤 value = [x for x in value if x.endswith(".com") and "." not in x[:-4]] print(value) # 输出:['JaneDoe@gmail.com']
代码说明
x.endswith(".com")先校验邮箱后缀为.com,避免非.com后缀的字符串被误处理x[:-4]截取除最后4位(.com的长度刚好是4)之外的所有内容"." not in x[:-4]确认除了后缀的.com之外,剩余部分没有其他的.,符合保留要求
内容的提问来源于stack exchange,提问作者swaziland
相关产品推荐
相关产品推荐

