我尝试创建一个找到列表最小值的函数并将其删除,但不使用.remove或min。我有代码来找到最小值:
userlist = [1,2,3,4,5]
smallest = userlist[0]
def removeMin():
for i in range(1, len(userlist)):
if userlist[i] < smallest:
smallest = userlist[i]
我尝试过使用.pop,但显然不起作用,因为minimal是变量而不是位置。任何帮助将不胜感激。
答案 0 :(得分:1)
如果您正在迭代python对象,那么迭代比使用范围有更好的方法。任何可迭代都可以像这样循环:
for x in my_list:
pass # do something
上面将逐步完成将当前迭代设置为x
的每个元素。但是,如果您还想要索引,请使用内置的Python enumerate()
,而不是只提供项目,也会提供当前索引,如下所示:
for index, item in enumerate(my_list):
pass # do something
因此,对于您的功能,您需要以下内容:
def removeMin(my_list):
smallestIndex = 0
smallest = my_list[0]
for i,val in enumerate(my_list):
if val < smallest:
smallest = val
smallestIndex = i
my_list.pop(smallestIndex)
return my_list
编辑:如果它是一个谜题,那么最狡猾的做法是使用list comprehension,如下所示:
userlist.pop(userlist.index(-max([-u for u in userlist])))
此:
[-u for u in userlist]
max
imum(这是正常列表中的最小值)max(...)
userlist.index(-...)
userlist.pop(...)
Voila,而不是.remove
或min
!
答案 1 :(得分:0)
这是一种直接的方法:
#!/usr/bin/python
userlist = [10,2,30,4,5]
def rm_min(lis):
minn = None
ind = None
for i, j in enumerate(lis):
if minn and j < minn:
minn = j
ind = i
elif not minn:
minn = j
else:
pass
return [ y for x,y in enumerate(userlist) if x != ind]
print rm_min(userlist)
输出:
[10,30,4,5]
答案 2 :(得分:0)
好吧,如果你的主要任务只是找出并删除某个列表中的最小项目,我的意思是不关心这些元素的顺序。也许你可以试试python的heapq
模块。
它提供了一个实现,可以将列表转换为堆,就地。然后,您可以以简单有效的方式删除堆中最小的元素:
以下是一个示例:
import heapq
#alist could be a disordered list, it doesn't matter
alist = [10, 2, 4, 5, 8, 50]
heapq.heapify(alist) #transform alist to heap, in-place. That means None is returned
smallest = heapq.heappop(alist) #pop the smallest element of alist, here is 2
print smallest #output: 2
你可以继续使用alist
查找并删除剩余heapq.heappop(alist)
的第二个小(第3小,第4小......)元素,直到{{ 1}}提出(没有留在alist中):
IndexError
如果继续...... print heapq.heappop(alist) #output: 4
print heapq.heappop(alist) #output: 5
print heapq.heappop(alist) #output: 8
print heapq.heappop(alist) #output: 10
print heapq.heappop(alist) #output: 50
被提出:
IndexError
您可以将In [7]: heapq.heappop(alist)
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
/home/chiyu/<ipython-input-7-8faac314c419> in <module>()
----> 1 heapq.heappop(alist)
IndexError: index out of range
In [8]:
放入heappop
块:
try/except
输出结果为:
import heapq
alist = [10, 2, 4, 5, 8, 50]
heapq.heapify(alist)
while True:
try:
smallest = heapq.heappop(alist)
except IndexError:
break
print smallest
有一件事值得再次提及:
因为当你致电2
4
5
8
10
50
时,这些元素的订单发生了变化:
heapq.heapify(alist)
答案 3 :(得分:0)
这是一种简单的方法,没有任何复杂的循环和功能
arr=[1,20,5,78,30]
count=0
element=int(input("enter the element you want to remove:"))
for i in range(len(arr)):
if(arr[i]==element):
count=count+1
if(count>=1):
pos=arr.index(element)
arr1 = arr[:pos]+arr[pos+1:]
print(arr1)
else:
print("element not found in array")