【发布时间】:2010-10-23 13:37:28
【问题描述】:
我有一个清单说:
['batting average', '306', 'ERA', '1710']
如何在不接触字符串的情况下转换预期的数字?
感谢您的帮助。
【问题讨论】:
标签: python string integer numbers
我有一个清单说:
['batting average', '306', 'ERA', '1710']
如何在不接触字符串的情况下转换预期的数字?
感谢您的帮助。
【问题讨论】:
标签: python string integer numbers
changed_list = [int(f) if f.isdigit() else f for f in original_list]
【讨论】:
['batting average', '306', 'ERA', '1710.5']
数据看起来像是你会知道数字应该在哪些位置。在这种情况下,最好明确地转换这些位置的数据,而不是仅仅转换任何看起来像数字的东西:
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 ]
如果您的列表包含浮点数、字符串和整数(正如评论中 @d.putto 所指出的那样)
【讨论】:
sum([c.isalpha() for c in f]) 是检查“f 中的任何字符是否为字母”的次优方法 - 尝试any(c.isalpha() for c in f) 以提高可读性和性能。当然,如果f 等于例如'!'——一个不是数字但没有字母数字字符的字符串——并且也无法转换例如'1.7e3'——一个包含字母数字字符但尽管如此,作为参数传递给float(“指数表示法”)是完全可以的。