计算和return第二大数和第二小数的差
calculate and return the difference between the second largest number and the second smallest number
给定一个Python列表,计算并return第二大数和第二小数之间的差值。假设列表包含两个或更多元素。
功能规格:
第二大/最小的数字必须不同于列表中的最大/最小数字。即:
difference([10, 10, 10, 8, 5, 2, 1, 1, 1]) == 8 - 2 == 6
应该以列表作为输入。
def difference(list1):
# Your code here
return*
这是一个简单但不是最有效的方法。你可以通过两步实现:
- 将
list
转换为 set
,以删除重复的数字。
- 使用
heap
在set
中查找nlargest
和nsmallest
def difference(list1):
set1 = set(list1)
return heapq.nlargest(2, set1)[1] - heapq.nsmallest(2, set1)[1]
这是一种单程方式,更有效的方式,使用 4 个变量:
def difference(list1):
max1, max2, min1, min2 = float('-inf'), float('-inf'), float('inf'), float('inf')
for x in list1:
if x > max1:
max1, max2 = x, max1
elif x >= max2 and x != max1:
max2 = x
if x < min1:
min1, min2 = x, min1
elif x <= min2 and x != min1:
min2 = x
return max2 - min2
测试和输出:
print(difference([10, 10, 10, 8, 5, 2, 1, 1, 1]))
# 6
希望对您有所帮助,如有其他问题,请评论。 :)
首先我们从给定的列表中构造一个集合以删除重复值,然后对它们进行排序以轻松找到第二大和最小的值。
def difference(list1):
list1 = sorted(set(list1))
print(list1) # --> [1, 2, 5, 8, 10]
if list1[1] != list1[-2]:
return list1[-2] - list1[1]
print(difference([10, 10, 10, 8, 5, 2, 1, 1, 1]) == 8 - 2 == 6) # --> True
给定一个Python列表,计算并return第二大数和第二小数之间的差值。假设列表包含两个或更多元素。 功能规格: 第二大/最小的数字必须不同于列表中的最大/最小数字。即:
difference([10, 10, 10, 8, 5, 2, 1, 1, 1]) == 8 - 2 == 6
应该以列表作为输入。
def difference(list1):
# Your code here
return*
这是一个简单但不是最有效的方法。你可以通过两步实现:
- 将
list
转换为set
,以删除重复的数字。 - 使用
heap
在set
中查找
nlargest
和nsmallest
def difference(list1):
set1 = set(list1)
return heapq.nlargest(2, set1)[1] - heapq.nsmallest(2, set1)[1]
这是一种单程方式,更有效的方式,使用 4 个变量:
def difference(list1):
max1, max2, min1, min2 = float('-inf'), float('-inf'), float('inf'), float('inf')
for x in list1:
if x > max1:
max1, max2 = x, max1
elif x >= max2 and x != max1:
max2 = x
if x < min1:
min1, min2 = x, min1
elif x <= min2 and x != min1:
min2 = x
return max2 - min2
测试和输出:
print(difference([10, 10, 10, 8, 5, 2, 1, 1, 1]))
# 6
希望对您有所帮助,如有其他问题,请评论。 :)
首先我们从给定的列表中构造一个集合以删除重复值,然后对它们进行排序以轻松找到第二大和最小的值。
def difference(list1):
list1 = sorted(set(list1))
print(list1) # --> [1, 2, 5, 8, 10]
if list1[1] != list1[-2]:
return list1[-2] - list1[1]
print(difference([10, 10, 10, 8, 5, 2, 1, 1, 1]) == 8 - 2 == 6) # --> True