删除列表python问题中的最小值



问题要求构建一个函数,该函数将返回除该列表中第一个遇到的最小数字之外的数字列表。如果提供了空列表,则返回空列表。例如:[1,2,3,1,1]->[2,3,1,1]不过,我的代码只返回[2,3],即使列表后面的两个在第一个之前没有遇到,因此不应该返回。我的代码:

def remove_smallest(numbers):
list1 = []
if len(numbers) == 0:
return numbers
for number in numbers[:len(numbers)]:
if numbers.index(number) != numbers[numbers.index(min(numbers))]:
list1.append(number)
return list1

应为:[1,2,3,1,1]->[2,3,1,1]输出:[2,3]

使用for循环和if语句,您已经过滤了所有不是最小数字的数字。

def remove_smallest(numbers):
if len(numbers) == 0:
return numbers
for number in numbers[:len(numbers)]:
if(number == min(numbers)):
numbers.remove(number)
break
return numbers  

这将是一个更好的代码。当if条件得到满足并且指针进入if块时,会有一个break语句退出循环。

还有更有效的方法来解决这个问题。

复制输入列表,然后:

def remove_smallest(numbers):
if numbers is None or len(numbers) == 0:
return []
copy = numbers.copy()
copy.remove(min(numbers))
return copy
print(remove_smallest([1,0,0,1]))

输出:

[1, 0, 1]

替代方案:

def remove_smallest(numbers):
if numbers is None or len(numbers) == 0:
return []
i = numbers.index(min(numbers))
return numbers[:i] + numbers[i+1:]

解决方案非常简单。使用此:

def remove_smallest(numbers):
smallest = min(numbers)
for number in numbers:
if number == smallest:
numbers.remove(number)
return numbers

希望这是你需要的

编辑:根据你的问题,我假设可以有多个最小的数字。因此,请使用以下内容:

def remove_smallest(numbers):
smallest = min(numbers)
newList = []
for number in numbers:
if number != smallest:
newList.append(number)
return newList

好的,现在我终于明白你的问题了。这是工作代码:

def remove_smallest(numbers):
smallestIndex = numbers.index(min(numbers))
print(smallestIndex)
numbers.pop(smallestIndex)
return numbers
print(remove_smallest([1, 2, 3, 1, 1]))

输出为:[2, 3, 1, 1]这适用于的所有测试

最新更新