列表理解从Python列表中删除元素,如果它只是数字(即使其中有“_”或“-”)

问题描述 投票:0回答:1

我有很多这样的清单

synonyms = ["3,2'-DIHYDROXYCHALCONE", '36574-83-1', '36574831', "2',3-Dihydroxychalcone",  '(E)-1-(2-hydroxyphenyl)-3-(3-hydroxyphenyl)prop-2-en-1-one', MLS002693861]

我需要从中删除所有仅由数字组成的元素。我不知道如何删除元素 [1],因为它只是数字,但有随机的中间破折号。

当然,这是行不通的,因为破折号使元素不是数字:

synonym_subset = [x for x in synonym_subset if not (x.isdigit())]

我不能只删除破折号,因为我希望保留其他元素中的破折号:

synonym_subset = [x.replace('-','') for x in synonym_subset]

我可以运行上面的代码来查找要删除的元素的索引,然后以这种方式删除它们,但我希望得到一个单行代码。

谢谢。

python list-comprehension
1个回答
0
投票

尝试:

synonyms = [
    "3,2'-DIHYDROXYCHALCONE",
    "36574-83-1",
    "36574831",
    "2',3-Dihydroxychalcone",
    "(E)-1-(2-hydroxyphenyl)-3-(3-hydroxyphenyl)prop-2-en-1-one",
    "MLS002693861",
]

out = [s for s in synonyms if not all(ch in "0123456789-_" for ch in s)]
print(out)

打印:

[
    "3,2'-DIHYDROXYCHALCONE",
    "2',3-Dihydroxychalcone",
    "(E)-1-(2-hydroxyphenyl)-3-(3-hydroxyphenyl)prop-2-en-1-one",
    "MLS002693861",
]
© www.soinside.com 2019 - 2024. All rights reserved.