【问题标题】:Python adding elements from stringPython从字符串中添加元素
【发布时间】:2011-02-23 23:05:22
【问题描述】:

我有这样的字符串“1 1 3 2 1 1 1 2 1 1 1 1 1 1 1 1,5 0,33 0,66 1 0,33 0,66 1 1 2 1 1 2 1 1 2 0,5 0,66 2 1 2 1 1 1 0 1"。

如何在python中相互添加元素?

我试过了:

list = []
for x in str.replace(' ', ''):
    list.append(x)
sum = 0
for y in list:
    sum = sum + double(x)

但我经常遇到错误。

【问题讨论】:

    标签: python string list replace


    【解决方案1】:
    print sum(float(x.replace(',', '.')) for x in str.split(' '))
    

    输出:

    45.64
    

    【讨论】:

      【解决方案2】:

      “蟒蛇式”的做法:

      sum([float(num) for num in str.replace(',', '.').split(' ')])
      

      通过将字符串用空格分隔来创建一个列表,然后将每个部分变成一个浮点数并将它们相加。

      【讨论】:

      • 大卫:你必须考虑随机逗号。
      • 逗号有什么随机性?
      • 大卫:为什么不直接删除列表并使用生成器语法?
      • 注意:split 默认使用 ' '。无需明确指定
      【解决方案3】:

      我们不要那么以民族为中心。 ',' 对许多人来说是合法的小数点。不要替换它,使用 locale 模块来适应它:

      >>> s = "1 1 3 2 1 1 1 2 1 1 1 1 1 1 1 1,5 0,33 0,66 1 0,33 0,66 1 1 2 1 1 2 1 1 2 0,5 0,66 2 1 2 1 1 1 0 1"
      >>> import locale
      >>> locale.setlocale(0,"po")
      'Polish_Poland.1250'
      >>> sum(map(locale.atof, s.split()))
      45.639999999999993
      

      【讨论】:

      • 那么输出不应该是45,639吗?
      • 值 45.64(我写的)是值 45.64,不管它是如何显示的。如果您需要以本地化格式将其打印回来,请将其包装在 locale.str() 中,在这种情况下会给出“45,64”。
      【解决方案4】:
      my_string = "1 1 3 2 1 1 1 2 1 1 1 1 1 1 1 1,5 "
                  "0,33 0,66 1 0,33 0,66 1 1 2 1 1 2 "
                  "1 1 2 0,5 0,66 2 1 2 1 1 1 0 1"
      
      my_string = my_string.replace(',', '.')
      
      value = sum([float(n) for n in my_string.split()])
      

      【讨论】:

        【解决方案5】:

        编辑:如果大卫的猜测是正确的,你需要小数:

        >>> from math import fsum
        >>> fsum(float(n) for n in input.replace(',', '.').split())
        45.640000000000001
        

        注意我使用math.fsum() 来保留浮点损失。

        【讨论】:

        • 嗯?你失去了我。这是否意味着我们应该改用float
        【解决方案6】:

        如果我明白你想要什么,那么试试这个:

        list = []
        for x in str.replace(',', '.').split():
            list.append(x)
        sum = 0
        for x in list:
            sum = sum + float(x)
        

        【讨论】:

          【解决方案7】:

          这行得通:

          sum(float(n) for n in str.replace(',','.').split())
          

          【讨论】:

          • 这与我的答案相同(现在似乎还有许多其他人的答案)。随意接受我们的答案之一!
          • 是的,我知道,你一定是在我创建我的时写了你的 :)
          猜你喜欢
          • 2023-02-15
          • 1970-01-01
          • 2021-08-02
          • 1970-01-01
          • 1970-01-01
          • 2018-04-12
          • 1970-01-01
          • 2019-05-07
          • 2011-08-18
          相关资源
          最近更新 更多