![](/img/trans.png)
[英]How can I remove unwanted characters from a words list and put them cleared in another list using Python?
[英]How to remove unwanted elements from list using python
我有一个输入列表:
list_1 = ['29','560001','08067739333','560037002','29AAACC0462F1Z0','55XX1XXX19','07S23X09','98561XXX1X9']
我试过了:
output_list = [i for i in list_1 if 'X' in i or i.isnumeric()==True]
给出额外的元素“07S23X09”,这是错误的:
output_list = ['29','560001','08067739333','560037002','55XX1XXX19','07S23X09','98561XXX1X9']
预期输出是带有数字的列表以及带有数字和特定字符 X 的元素,否则其他元素应该被丢弃:
output_list = ['29','560001','08067739333','560037002','55XX1XXX19','98561XXX1X9']
您可以使用
import re
list_1 = ['29','560001','08067739333','560037002','29AAACC0462F1Z0','55XX1XXX19','07S23X09','98561XXX1X9']
rx = re.compile('[0-9X]+')
print ( [x for x in list_1 if rx.fullmatch(x)] )
# => ['29', '560001', '08067739333', '560037002', '55XX1XXX19', '98561XXX1X9']
请参阅Python 演示。
使用re.fullmatch('[0-9X]+', x)
,您只保留完全由数字或X
字符组成的项目。
请参阅^[0-9X]+$
正则表达式演示。
注意:如果字符串中必须至少有一位数字,即如果您想失败并因此丢弃所有只是XXX
项目,您可以使用
^X*[0-9][0-9X]*$
或者, ^(?=X*[0-9])[0-9X]+$
。 请参阅正则表达式演示。
怎么样: output_list = [i for i in list_1 if i.replace('X', '').isnumeric()==True]
你似乎想要所有的数字,但如果它是一个“X”就可以了。 因此,如果您删除 X 并检查数字,就可以解决问题。
这可以使用 python regex 轻松完成,如下所示
import re
list_1 = ['29','560001','08067739333','560037002','29AAACC0462F1Z0','55XX1XXX19','07S23X09','98561XXX1X9']
l2 = re.sub('[a-zA-VY-Z]', "", str(list_1)) # delete unwanted characters which are lowercase and uppercase letters from a to v and Y-Z since we only need to preserve uppercase letter X
print(l2)
输出
['29', '560001', '08067739333', '560037002', '29046210', '55XX1XXX19', '0723X09', '98561XXX1X9']
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.