如何用列表推导式移除Python列表中含连字符/下划线的纯数字元素
移除列表中含连字符的纯数字类元素
原始列表
synonyms = ["3,2'-DIHYDROXYCHALCONE", '36574-83-1', '36574831', "2',3-Dihydroxychalcone", '(E)-1-(2-hydroxyphenyl)-3-(3-hydroxyphenyl)prop-2-en-1-one', 'MLS002693861']
需求
需要移除列表中所有仅由数字构成的元素,包括像'36574-83-1'这种中间带有连字符的元素。
遇到的问题
- 使用
[x for x in synonym_subset if not (x.isdigit())]无法过滤带连字符的数字元素,因为连字符的存在导致isdigit()返回False - 直接对所有元素执行
x.replace('-','')会破坏其他有效元素中的连字符,不可取
一行列表推导式解决方案
filtered_synonyms = [x for x in synonyms if not (isinstance(x, str) and x.replace('-', '').isdigit())]
原理说明
- 先判断元素是否为字符串类型,避免非字符串元素触发报错
- 对字符串元素移除所有连字符后,检查剩余内容是否全为数字
- 仅保留不满足上述条件的元素,既过滤掉纯数字、带连字符的纯数字类元素,又不会损坏其他含连字符的有效元素
内容的提问来源于stack exchange,提问作者Brandon Kieft
相关产品推荐
相关产品推荐

