如何将列表中的字符串数字转换为整数?

12

我有一个列表,比如说:

['batting average', '306', 'ERA', '1710']

如何在不改变字符串的情况下转换目标数字?
感谢您的帮助。
4个回答

41
changed_list = [int(f) if f.isdigit() else f for f in original_list]

3
一个优美的一行代码,瞧!列表推导式的威力。 - mkClark
我也在思考相似的方向。 - Nope
好的解决方案,但如果列表中还有浮点数值呢 ['打击率','306','防御率','1710.5'] - d.putto
@d.putto添加了一个回答到你的问题。 - Shankar ARUL

5

数据看起来像你知道数字应该在哪些位置。在这种情况下,最好明确地转换这些位置的数据,而不仅仅是将任何看起来像数字的内容进行转换:

ls = ['batting average', '306', 'ERA', '1710']
ls[1] = int(ls[1])
ls[3] = int(ls[3])

这是静态情况下的最佳解决方案,而Alex的解决方案则适用于动态情况。 - Unknown

5

试试这个:

def convert( someList ):
    for item in someList:
        try:
            yield int(item)
        except ValueError:
            yield item

newList= list( convert( oldList ) )

0
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在评论中指出的那样)

1
sum([c.isalpha() for c in f]) 这种方式检查 "f 中是否有任何字母字符" 是相当次优的 - 尝试使用 any(c.isalpha() for c in f) 来提高可读性和性能。当然,如果 f 等于例如 '!' -- 一个既不是数字也没有字母数字字符的字符串 -- 那么两者都会失败 -- 并且也无法转换例如 '1.7e3' -- 一个包含字母数字字符但仍然可以完全作为 float 的参数传递的字符串("指数符号")。 - Alex Martelli
真的。好点子...... 发布这篇文章只是为了回答d.putto的特定编造的例子。在发布我的半成品答案之前应该更加深思熟虑! - Shankar ARUL

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接