3 回答

TA貢獻(xiàn)1844條經(jīng)驗 獲得超8個贊
如果除了“任何東西可能是或可能不是有效的浮點數(shù)”之外沒有其他標(biāo)準(zhǔn),那么就try全部:
def try_float(value):
try:
return float(value)
except ValueError:
return value
result = [[try_float(v) for v in l] for l in my_list]

TA貢獻(xiàn)2036條經(jīng)驗 獲得超8個贊
.isnumeric
不返回True
表示為字符串的浮點數(shù)。對于僅由數(shù)字組成而.
不是數(shù)字的字符串,它返回 true。
這就是為什么您的解決方案只轉(zhuǎn)換整數(shù),而不轉(zhuǎn)換浮點數(shù)。
檢查字符串是否為浮點數(shù)并因此對其進(jìn)行轉(zhuǎn)換的最佳選擇是嘗試float()
捕獲引發(fā)的ValueError
并簡單地繼續(xù)。
如果您知道嵌套只有一層深,deceze 的解決方案應(yīng)該會做得很好。
如果可能有更多嵌套,您可以嘗試遞歸函數(shù) -
def convert_float(l: list):
? ? for i, v in enumerate(l):
? ? ? ? if type(v) == list:
? ? ? ? ? ? convert_float(v)
? ? ? ? ? ? continue
? ? ? ? try:
? ? ? ? ? ? l[i] = float(v)
? ? ? ? except ValueError:
? ? ? ? ? ? continue

TA貢獻(xiàn)1776條經(jīng)驗 獲得超12個贊
您也可以使用regex它來查找。像下面這樣的東西:
In [105]: import re
In [106]: r = re.compile(r"^\d*[.,]?\d*$")
In [107]: [[float(v) if r.match(v) else v for v in l] for l in my_list]
Out[107]:
[['A', 'B', 'C', 0.0],
['D', 'E', 'F', 1.2],
['G', 'H', 'I', 0.0],
['J', 'K', 'L', 'M']]
添加回答
舉報