【问题标题】:Python for() loop with math operatorsPython for() 循环与数学运算符
【发布时间】:2013-08-02 06:33:35
【问题描述】:

假设我有一个数字列表,例如:

my_list = [1, 17, 2]

我想把它们加在一起。我知道我可以使用print(sum(my_list))。但是我想看看是否有另一种方法,所以我尝试了以下方法:

b = len(my_list)
for m in range(my_list[0], my_list[b-1]):
    m += m
    print(m)

我确信这样的事情应该有效,但我显然做错了。其输出为2。我试过之后:

result = 0
b = len(my_list)
for m in range(my_list[0], my_list[b-1]):
    result = result + m
    print(result)

这会输出1

请解释我做错了什么以及如何纠正它。

【问题讨论】:

    标签: python list for-loop python-3.x


    【解决方案1】:

    由于您使用范围函数定义 1 和 2 之间的范围。在 m 中生成的唯一数据是 1,因此结果是 1。

    在 Python 中,您可以直接迭代序列的元素:

    m = [1, 17, 2]
    res = 0
    for i in m:
        res += i
    print res
    

    【讨论】:

    • 感谢您使用文字来解释您的回答。
    【解决方案2】:

    首先,您应该输入正确的范围:0..2 在您的情况下(因为您的列表项的索引从 0 开始并且有 2 个项目)

      for i in range(0, b):
          result = result + my_list[i];
    

    或者,如果您更喜欢“for each”样式,则应按要求和的列表进行迭代:

      for m in my_list:
          result = result + m;
    

    最后,如果您只想打印最终总和,您应该更正打印缩进:

      for m in my_list:
          result = result + m;
    
      print(result)  # <- mind indent
    

    总结:

      my_list = [1, 17, 2]
    
      result = 0
    
      for m in my_list:
          result = result + m;
    
      print(result)
    

    【讨论】:

    • 感谢您提供的多个示例,这很有帮助。
    【解决方案3】:
    from operator import add
    
    my_list = [1, 17, 2]
    result=reduce(add, my_list)
    

    【讨论】:

      【解决方案4】:
      import functools
      
      print(functools.reduce(lambda x,y: x+y, my_list))
      

      【讨论】:

      • 感谢您的回复,我会注意这一点以供将来参考。我还没有使用 functools,不过谢谢。
      • 如果你熟悉python 2.x中的reduce,在python 3.x中是一样的,但是它们将它包装在functools模块中
      • 我已经编程了大约一周了。我学到了很多东西,在这里和那里挣扎,但到目前为止已经克服了所有障碍。希望我能继续这样下去。这很有趣!
      【解决方案5】:

      试试这个

      my_list = [1, 17, 2]
      reduce(lambda x, y: x+y, my_list)
      

      【讨论】:

        【解决方案6】:

        要从 my_list 中获取值,您可以使用以下语法:

        for m in my_list:
            print m
        

        如果您使用范围,它将为您提供从 1(列表的第一个值)到 2(列表的长度 -1)的范围

        要添加列表的值,您可以尝试以下代码:

        out = 0
        for m in my_list:
           out = out + m
        print(out)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-12-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-03-14
          • 1970-01-01
          相关资源
          最近更新 更多