我在* python v3中发现了一件奇怪的事。* 6。以下代码返回TypeError: unsupported operand type(s) for +: 'int' and 'list'
arr = [1, 2, 3, 4, 5]
print(sum([[i] for i in arr]))
为什么会这样?我如何总结一份清单?
答案 0 :(得分:2)
以下是REPL的帮助:
>>> help(sum)
sum(iterable, start=0, /)
Return the sum of a 'start' value (default: 0) plus an iterable of numbers
When the iterable is empty, return the start value.
This function is intended specifically for use with numeric values and may
reject non-numeric types.
因此,内置sum
会返回start
值的总和,即0
和可迭代的数字。 Python并不能防止你事先滥用函数,它相信你至少试图做正确的事情。当然,如果你碰巧传递了一个列表列表,那么第一个列表元素将与0
相加,提出:
TypeError: unsupported operand type(s) for +: 'int' and 'list'
实际上,如果你传递一个start
参数,一个空列表,在这种情况下,它可以工作:
>>> sum([[e] for e in x], [])
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
然而,这将是低效的。您应该更喜欢[x for sublist in list_of_lists for x in sublist]
或任何其他线性时间算法。
答案 1 :(得分:1)
首先,您的for i in range(1,n+1):
df_invalid_i=df_i[df_i['SPEED'+str(i)]>500]
df_valid_i=~df_invalid_i
Invalid_cycles_i=df[df_invalid]
df=df[df_valid]
print(Invalid_cycles_i)
print(df)
会返回df_1
。
为什么不只是简单地打印数组的总和:
[[i] for i in arr]
或者,如果您不想更改[[1], [2], [3], [4], [5]]
:
print(sum(arr))
我更喜欢使用[[i] for i in arr]
,更短的代码和可读性。
答案 2 :(得分:0)
只做...
arr = [1, 2, 3, 4, 5]
print sum(arr)
您希望求和多个元素。您已经有一个输入功能的列表。为什么要使用已有的列表来获得列表理解?
如果您希望将展平列表列表放入单个列表中,为了求和全部,您可以观看此thread,然后使用总和就像我上面那样。
答案 3 :(得分:0)
你应该这样使用它。
$scope.empobj=[{first_name:"new",last_name:"sjkk",id:"2"},{first_name:"new",last_name:"sjkk",id:"3"},{first_name:"new",last_name:"sjkk",id:"4"}];
$scope.selectedemp1= function(id){
console.log(id);
如果你使用括号' i'像[i]一样,这意味着“我”。是一个元组中的元素,你不能用列表添加一个整数。
TypeError:+:' int'不支持的操作数类型和'列出' - > 这意味着它无法添加带有列表的整数。因为当你使用for循环时,它每次都会给你一个元素,循环被执行,即一个整数,但你期望一个列表返回到sum()函数。因此,它不会那样工作。