- python - 从列表中删除所有非数字

从文件中读取后,我有一个列表,列表不仅包括数字,还包括其他字符,我想摆脱它。

我尝试使用re.sub函数,但是,这似乎不起作用,


import re 



Poly_id= [['0', '[4', '8', '18', '20', '5', '0', '4]'], ['1', '[13', '16', 


'6', '11', '13]'], ['2', '[3', '1', '10', '9', '2', '15', '3]'], ['3', 


'[13', '12', '16', '13]'], ['4', '[13', '11', '17', '14', '7', '13]']]



for x in Poly_id:


 [re.sub(r'W', '', ch) for ch in x]



这似乎没有改变这个列表中的东西。

我想有一个只有数字的列表,这样我才能把它们转换成整数,

时间:

我想从技术上讲[4是非数值的,所以,你可以这样做:


Poly_id = [[char for char in _list if str.isnumeric(char)] for _list in Poly_id]



输出:


['0', '8', '18', '20', '5', '0']


['1', '16', '6', '11']


['2', '1', '10', '9', '2', '15']


['3', '12', '16']


['4', '11', '17', '14', '7']



如果您只想删除非数字值而不是完整条目,则可以执行以下操作:


Poly_id = [[''.join(char for char in substring if str.isnumeric(char)) for substring in _list] for _list in Poly_id]



输出:


['0', '4', '8', '18', '20', '5', '0', '4']


['1', '13', '16', '6', '11', '13']


['2', '3', '1', '10', '9', '2', '15', '3']


['3', '13', '12', '16', '13']


['4', '13', '11', '17', '14', '7', '13']



如果你想要除去'[4'中的'[',但是,保留'4',请执行以下操作:


res = [[re.sub(r'W', '', st) for st in inlist] for inlist in Poly_id]



res是:


[


 ['0', '4', '8', '18', '20', '5', '0', '4'],


 ['1', '13', '16', '6', '11', '13'],


 ['2', '3', '1', '10', '9', '2', '15', '3'],


 ['3', '13', '12', '16', '13'],


 ['4', '13', '11', '17', '14', '7', '13']


]



你可以使用一个模块,itertools"


import itertools



list_of_lists = [[1, 2], [3, 4]]


print(list(itertools.chain(*list_of_lists)))



>>>[1, 2, 3, 4]



如果要使用正规表达式保留数字部分,可以执行以下操作:


[[re.search(r'(d+)', char).group(0) for char in _list] for _list in Poly_id]



...