我有一个列表,比如说:
['batting average', '306', 'ERA', '1710']
如何在不改变字符串的情况下转换目标数字?
感谢您的帮助。
changed_list = [int(f) if f.isdigit() else f for f in original_list]
数据看起来像你知道数字应该在哪些位置。在这种情况下,最好明确地转换这些位置的数据,而不仅仅是将任何看起来像数字的内容进行转换:
ls = ['batting average', '306', 'ERA', '1710']
ls[1] = int(ls[1])
ls[3] = int(ls[3])
试试这个:
def convert( someList ):
for item in someList:
try:
yield int(item)
except ValueError:
yield item
newList= list( convert( oldList ) )
a= ['batting average', '306', 'ERA', '1710.5']
[f if sum([c.isalpha() for c in f]) else float(f) for f in a ]
sum([c.isalpha() for c in f])
这种方式检查 "f 中是否有任何字母字符" 是相当次优的 - 尝试使用 any(c.isalpha() for c in f)
来提高可读性和性能。当然,如果 f
等于例如 '!'
-- 一个既不是数字也没有字母数字字符的字符串 -- 那么两者都会失败 -- 并且也无法转换例如 '1.7e3'
-- 一个包含字母数字字符但仍然可以完全作为 float
的参数传递的字符串("指数符号")。 - Alex Martelli
['打击率','306','防御率','1710.5']
。 - d.putto