Python仅从列表中删除字母元素

时间:2018-11-29 15:46:05

标签: python string python-3.x

我的数据非常混乱,我正在尝试删除包含字母或单词的元素。我正在尝试捕获具有字母数字和数字值的元素。我尝试了.isalpha(),但是没有用。我该如何删除?

lista = ['A8817-2938-228','12421','12323-12928-A','12323-12928',
             '-','A','YDDEWE','hello','world','testing_purpose','testing purpose',
        'A8232-2938-228','N7261-8271']
lista

尝试:

[i.isalnum() for i in lista] # gives boolean, but opposite of what I need. 

输出:

['A8817-2938-228','12421','12323-12928-A','12323-12928','-','A8232-2938-228','N7261-8271']

谢谢!

3 个答案:

答案 0 :(得分:1)

您可以在列表推导中添加条件检查,所以这就是您想要的:

new_list = [i for i in lista if not i.isalnum()]
print(new_list)

输出:

['A8817-2938-228', '12323-12928-A', '12323-12928', '-', 'testing_purpose', 'testing purpose', 'A8232-2938-228', 'N7261-8271']

请注意,如果字符串包含空格或下划线,则isalnum不会说True。一种选择是在检查之前将其删除:(您还需要使用isalpha而不是isalnum

new_list_2 = [i for i in lista if not i.replace(" ", "").replace("_", "").isalpha()]
print(new_list_2)

输出:

['A8817-2938-228', '12421', '12323-12928-A', '12323-12928', '-', 'A8232-2938-228', 'N7261-8271']

答案 1 :(得分:0)

列表中的数据类型是什么?

您可以尝试执行以下操作:

[str(i).isalnum() for i in lista] 

答案 2 :(得分:0)

似乎您可以测试至少一个字符与数字{em>或与'-'相等:

res = [i for i in lista if any(ch.isdigit() for ch in i) or i == '-']

print(res)

['A8817-2938-228', '12421', '12323-12928-A', '12323-12928',
 '-', 'A8232-2938-228', 'N7261-8271']