繁体   English   中英

我使用列表推导错了吗?

[英]Am I using list comprehensions wrong?

所以我的 Python 代码继续查找数字的总和(9983 = 9+9+8+3 = 29 = 2+9 = 11 = 1+1 = 2)不起作用,它给了我这个例外

ValueError: invalid literal for int() with base 10: '['". 

它之前没有使用列表理解,而是通过正常迭代列表来完成它,所以我怀疑这是列表理解的问题? 帮助?

x = int(input())
def rec(x):
   if (x<10):
      return x
   return rec(sum(x))
def sum(x):
   lst = [int(y) for y in list(str(x))]
   return sum(lst)
print(rec(x))

有一个名为sum的内置 function ,并且您定义了一个具有相同名称的 function - 但您需要原始 function 作为解决方案的一部分。

让我们首先将您的sum版本重命名为summation ,并借此机会进一步简化代码:

def rec(x):
    if x < 10:
        return x
    return rec(summation(x))

def summation(x):
    return sum(int(y) for y in str(x))

看看summation中如何需要内置sum 这就是为什么您的 function 必须具有不同的名称的原因,尽管我们可以使用列表推导,但将生成器表达式传递给sum更容易、更有效。 或者(但效率较低)我们可以使用列表推导:

def summation(x):
    lst = [int(y) for y in str(x)]
    return sum(lst)

无论哪种方式,它都按预期工作:

rec(9983)
=>2

您正在为 Python 制造混乱;-)

问题出在def sum(x):中,而不是在列表理解中。 sum是保留关键字。 只需重命名 function (以及对函数的调用),它就可以工作了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM