【问题标题】:Python - About variable declaration [closed]Python - 关于变量声明
【发布时间】:2017-10-10 11:03:53
【问题描述】:

想不出适合我的问题的标题。

所以无论如何,我一直在寻找一种算法来确定列表是否平衡,我遇到了这个问题:Algorithm for finding if an array is balanced

其中一个答案是我需要完成的任务。但是,我想了解如果我从下面的代码中更改第 2 行会发生什么。

def balanced(numbers):
    left_total, right_total = 0, sum(numbers)
    for pivot, value in enumerate(numbers):
       if left_total == right_total:
        return pivot
    left_total += value
    right_total -= value
    return None

如果我对第 2 行执行此操作,我想知道为什么它会抛出 TypeError: 'int' object is not iterable

left_total = 0
right_total = 0
sum(numbers)

希望有人能帮助我理解。 谢谢!

【问题讨论】:

  • right_total 被分配了sum(numbers) 的值。不是 0
  • 这三行不会抛出该错误。他们也不会做与他们要替换的人相同的事情。
  • and numbers 是一个列表,这就是错误的意思
  • left_total, right_total = 0, sum(numbers) 将分配 left_total -> 0 和 right_total -> sum(numbers)
  • 我实际上并不是在问 TypeError,而是在问变量的声明方式。我的假设是:left_total, right_total = 0, sum(numbers) 相当于:left_total = 0 right_total = 0 sum(numbers)

标签: python python-2.7


【解决方案1】:

您传入的“数字”变量是一个 int。

例如你不能做 sum(1) 但你可以做 sum([1,2]) 或 sum((1,2))

传递给平衡的变量必须是可迭代类型。又名列表、元组、集合等。

与您的错误无关:

你不应该这样做

left_total = 0
right_total = 0
sum(numbers)

而是

left_total = 0
right_total = sum(numbers)

如果你想模仿函数在做什么。

有关 left_total、right_total 问题的更多信息,请参阅:Is there a standardized method to swap two variables in Python?

https://docs.python.org/3/reference/expressions.html#evaluation-order

【讨论】:

  • 谢谢,这是我想问的,但我不知道如何表达我的问题。 :)
猜你喜欢
  • 2012-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-24
  • 2014-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多