【问题标题】:How to convert strings numbers to integers in a list?如何将字符串数字转换为列表中的整数?
【发布时间】:2010-10-23 13:37:28
【问题描述】:

我有一个清单说:

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

如何在不接触字符串的情况下转换预期的数字?

感谢您的帮助。

【问题讨论】:

    标签: python string integer numbers


    【解决方案1】:
    changed_list = [int(f) if f.isdigit() else f for f in original_list]
    

    【讨论】:

    • 优雅的单线。看看列表推导的威力。
    • 正在考虑类似的思路
    • 很好的解决方案但是如果列表也有浮点值怎么办['batting average', '306', 'ERA', '1710.5']
    • @d.putto 为您的问题添加了答案
    【解决方案2】:

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

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

    【讨论】:

    • 是的,这是静态情况下的最佳解决方案,而 Alex 最适合动态情况。
    【解决方案3】:

    试试这个:

    def convert( someList ):
        for item in someList:
            try:
                yield int(item)
            except ValueError:
                yield item
    
    newList= list( convert( oldList ) )
    

    【讨论】:

      【解决方案4】:
      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(“指数表示法”)是完全可以的。
      • 真的。好点...发布它只是为了回答 d.putto 的具体人为示例。在发布我半生不熟的答案之前应该多考虑一下!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-01-26
      • 2022-12-18
      • 2015-01-14
      • 2021-06-18
      • 1970-01-01
      • 2014-07-10
      相关资源
      最近更新 更多