Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
没有最低和最高列表整数的列表之和(python)_Python_If Statement_List Comprehension - Fatal编程技术网

没有最低和最高列表整数的列表之和(python)

没有最低和最高列表整数的列表之和(python),python,if-statement,list-comprehension,Python,If Statement,List Comprehension,试图练习我的列表理解,但在这一点上,我的代码每行长度的理解看起来有点(太)长: def sum_array(arr): return 0 if arr == None else sum(sorted(arr)[1:-1] for x in range(len(arr or [])-2)) 目标是计算整数之和减去最小值和最大值。如果数组为空,None,或者如果只存在1个元素,则函数应返回0 我收到以下邮件 TypeError:不支持+:“int”和“list”的操作数类型 请告知 不确

试图练习我的列表理解,但在这一点上,我的代码每行长度的理解看起来有点(太)长:

def sum_array(arr):
    return 0 if arr == None else sum(sorted(arr)[1:-1] for x in range(len(arr or [])-2)) 
目标是计算整数之和减去最小值和最大值。如果数组为空,
None
,或者如果只存在1个元素,则函数应返回0

我收到以下邮件

TypeError:不支持+:“int”和“list”的操作数类型


请告知

不确定为什么在
总和中需要
。似乎
x
没有在任何地方使用。这可以简化为:

def sum_array(arr):
    return 0 if not arr else sum(sorted(arr)[1:-1])

不确定为什么在
总和中需要
。似乎
x
没有在任何地方使用。这可以简化为:

def sum_array(arr):
    return 0 if not arr else sum(sorted(arr)[1:-1])

知道最大值和最小值在哪里的最简单方法是对列表进行排序

arr = sorted(arr)
arr[0]最小,arr[-1]最大

所以


知道最大值和最小值在哪里的最简单方法是对列表进行排序

arr = sorted(arr)
arr[0]最小,arr[-1]最大

所以

美胜于丑

def sum_数组(arr):
如果arr为None或len(arr)
美胜于丑

def sum_数组(arr):

如果arr为None或len(arr),则这里有一个满足您要求的版本:

def sum_array(arr):
    return (None if len(arr) <= 1 else 0) if not arr else sum(sorted(arr)[1:-1])

cases = [[j + 1 for j in range(i)] for i in range(5)]

for c in cases:
    print(c, sum_array(c))

# Requirements: Objective is to calculate sum of integers minus the min and
# max. If array is empty, None, or if only 1 element exists, the function
# should return 0.
# [] None
# [1] 0
# [1, 2] 0
# [1, 2, 3] 2
# [1, 2, 3, 4] 5
def sum_数组(arr):

return(如果len(arr)则无此版本符合您的要求:

def sum_array(arr):
    return (None if len(arr) <= 1 else 0) if not arr else sum(sorted(arr)[1:-1])

cases = [[j + 1 for j in range(i)] for i in range(5)]

for c in cases:
    print(c, sum_array(c))

# Requirements: Objective is to calculate sum of integers minus the min and
# max. If array is empty, None, or if only 1 element exists, the function
# should return 0.
# [] None
# [1] 0
# [1, 2] 0
# [1, 2, 3] 2
# [1, 2, 3, 4] 5
def sum_数组(arr):

return(如果len(arr)您得到
TypeError
,因为您尝试对列表进行
sum
操作,则返回无。让我稍微更改一下您的代码:

 In[1]: arr = [1, 2, 3, 4, 5]
        [sorted(arr)[1:-1] for x in range(len(arr))]

Out[1]: [[2, 3, 4], [2, 3, 4], [2, 3, 4], [2, 3, 4], [2, 3, 4]]
我更改列表理解上的生成器表达式以显示想法。实际上,在每次隐式
next
调用上都会生成一个列表。此错误的另一个后果是:

 In[2]: sum([[1],[2],[3]])       # will raise TypeError
Out[2]: TypeError: unsupported operand type(s) for +: 'int' and 'list'

 In[3]: sum([[1],[2],[3]], [])   # if you specify start, it will work
Out[3]: [1, 2, 3]
sum
函数的签名是
sum(iterable[,start])
。对iterable的项从左到右进行求和,并返回总数。
start
默认为0。iterable的项通常是数字,并且起始值不允许是字符串。在第一种情况下,您确实尝试求和
[1]+[2]+[3]+0
,并且由于未定义
list
int
之间的
+
,因此会出现TypeError。在第二种情况下,
[1]+[2]+[3]+[]
此操作连接列表,并且完全有效

如果您想查看您的代码和一些反馈,请访问Stackexchange的网站

如果你喜欢单行程序,你可以试试这个。这里还有一个假设,一个有效的数组总是
的实例:


但这不是一个好的做法!

您会得到
类型错误
,因为您尝试对列表进行
求和。让我稍微更改一下您的代码:

 In[1]: arr = [1, 2, 3, 4, 5]
        [sorted(arr)[1:-1] for x in range(len(arr))]

Out[1]: [[2, 3, 4], [2, 3, 4], [2, 3, 4], [2, 3, 4], [2, 3, 4]]
我更改列表理解上的生成器表达式以显示想法。实际上,在每次隐式
next
调用上都会生成一个列表。此错误的另一个后果是:

 In[2]: sum([[1],[2],[3]])       # will raise TypeError
Out[2]: TypeError: unsupported operand type(s) for +: 'int' and 'list'

 In[3]: sum([[1],[2],[3]], [])   # if you specify start, it will work
Out[3]: [1, 2, 3]
sum
函数的签名是
sum(iterable[,start])
。对iterable的项从左到右进行求和,并返回总数。
start
默认为0。iterable的项通常是数字,并且起始值不允许是字符串。在第一种情况下,您确实尝试求和
[1]+[2]+[3]+0
,并且由于未定义
list
int
之间的
+
,因此会出现TypeError。在第二种情况下,
[1]+[2]+[3]+[]
此操作连接列表,并且完全有效

如果您想查看您的代码和一些反馈,请访问Stackexchange的网站

如果你喜欢单行程序,你可以试试这个。这里还有一个假设,一个有效的数组总是
的实例:



<>(强)>但不是好的练习!< /强>

我看不到任何列表理解……首先,不要用相等的方式来比较<代码>没有< /代码>;使用标识。一个内衬是很酷的。但是,实际上,如果你不理解你自己的代码,你可以考虑使用多行代码。我不明白为什么你在范围内为x做那个<代码>(LEN(ARR或[])。-2)
担心
arr
没有
None
只会分散注意力。假设
arr
至少是一个可以添加的有效列表,然后从那里开始。你没有检查
arr
毕竟不包含字符串。我看不到任何列表理解。首先,不要与eq的
None
进行比较使用身份。单行是很酷的。但是,如果你不理解你自己的代码,你可以考虑使用多行代码。我不明白为什么你在范围内做X代码(LeN(ARR或[])- 2)。
担心
arr
没有
None
只会分散注意力。假设
arr
至少是一个可以添加的有效列表,然后从那里开始。毕竟,你没有检查
arr
是否不包含字符串。
如果arr是None或len(arr)
如果arr
在几乎任何错误值上都会失败。最好是显式的。你是什么意思?一个带有单个项的数组不是错误的。虽然
排序的
可以处理这个问题,但我宁愿显式
arr[1:-1]
返回
[]
的总和为
0
,但还是“显式优于隐式”
如果arr为None或len(arr)
如果arr
在几乎任何错误值上都会失败。最好是显式的。你是什么意思?带有单个项的数组不是错误的。虽然
排序的
可以处理这个问题,但我宁愿显式的
arr[1:-1]
返回
[]
,并且总和是
0
,但再次返回“显式优于隐式”这是非常有帮助和有效的,感谢您的快速回复。这是非常有帮助和有效的,感谢您的快速回复。如果您只需要一个元素,还可以返回
0
我建议您尝试使用