繁体   English   中英

如何使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM