[英]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.