我有一個如下所示的串列,我的目標是從中獲取數值。但結果輸出應該與原始串列的格式相似。例如,我的串列如下所示:
a_list = [['49', 'XT', '19.0', '93'],
['YTX', '124.0', '167 ', '77.0'],
['4 ', 'Y', '128,', '125,'],
['142.0', '120', '141.0'],
['12 ', '51.0'],
['0,', ' 82', '156'],
['82', '102.0'],
['94', 'YYZ', '178.0', '72'],
['120', 'YXT', '142', ' 134'],
['45,', '46', '79.0']]
我想要的輸出是
b_list = [['49', '19.0', '93'],
['124.0', '167 ', '77.0'],
['4 ', '128,', '125,'],
['142.0', '120', '141.0'],
['12 ', '51.0'],
['0,', ' 82', '156'],
['82', '102.0'],
['94', '178.0', '72'],
['120', '142', ' 134'],
['45,', '46', '79.0']]
我寫了以下代碼,但它跳過了很多數字加上格式不一樣
final=[]
for i in a_list:
for num in i:
if num.isdigit():
final.append(num)
我做錯了什么?以及使用串列理解可以完成的任何方式?
uj5u.com熱心網友回復:
一個簡單的正則運算式解決方案:
import re
isnum = re.compile(r'\d (\.\d )?$')
final=[]
for i in a_list:
tmp =[]
for num in i:
num = num.strip().replace(",","")
if isnum.match(num):
tmp.append(num)
final.append(tmp)
uj5u.com熱心網友回復:
嘗試這個:
final=[]
for i in a_list:
for num in i:
tmp=[]
if num.isdigit():
tmp.append(num)
final.append(tmp)
uj5u.com熱心網友回復:
您的輸入串列有時會包含無法通過is.decimal檢查的字符。定義過濾方法并將其傳遞給filter內置函式。
def _method(x):
y = x.strip().replace('.', '').replace(',', '')
return y.isdecimal()
result = [list(filter(_method, x)) for x in a_list]
在方法方面存在一個小問題str.isidigit,例如它會接受像“3”這樣的字符,并且這些字符不能作為索引傳遞給 Indexable 物件。str.isdecimal更嚴格,據我所知,通過的所有內容都str.isdecimal可以用作索引:
>>> a = '3'
>>> a.isdigit()
True
>>> a.isdecimal()
False
uj5u.com熱心網友回復:
這是我得到的一個解決方案:
b_list = []
for i in a_list:
new_list = []
for j in i:
if j.replace(".", "", 1).replace(" ", "", 1).replace(",", "", 1).isdigit():
new_list.append(j)
b_list.append(new_list)
b_list
輸出與您想要的輸出相同:
[['49', '19.0', '93'],
['124.0', '167 ', '77.0'],
['4 ', '128,', '125,'],
['142.0', '120', '141.0'],
['12 ', '51.0'],
['0,', ' 82', '156'],
['82', '102.0'],
['94', '178.0', '72'],
['120', '142', ' 134'],
['45,', '46', '79.0']]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/429385.html
上一篇:回圈一個串列并從另一個串列中跳過
