Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.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 如何在不使用.remove的情况下从列表中删除元素_Python - Fatal编程技术网

Python 如何在不使用.remove的情况下从列表中删除元素

Python 如何在不使用.remove的情况下从列表中删除元素,python,Python,我正在尝试创建一个函数,用于查找列表的最小值并将其删除,但不使用.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] userlist=[1,2,3,4,5] 最小值=用户列表

我正在尝试创建一个函数,用于查找列表的最小值并将其删除,但不使用.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]
userlist=[1,2,3,4,5]
最小值=用户列表[0]
def removeMin():
对于范围(1,len(userlist))中的i:
如果用户列表[i]<最小值:
最小=用户列表[i]

我尝试过使用.pop,但显然这不起作用,因为最小值是一个变量,而不是一个位置。任何帮助都将不胜感激。

这里有一个简单的方法:

#!/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)
#/usr/bin/python
用户列表=[10,2,30,4,5]
def rm_最小值(lis):
minn=无
ind=无
对于枚举(lis)中的i,j:
如果minn和j
输出:


[10,30,4,5]

如果要迭代python对象,有比使用range更好的迭代方法。任何iterable都可以像这样循环:

for x in my_list:
   pass # do something
以上内容将逐步介绍将当前迭代设置为
x
的每个元素。但是,如果还需要索引,请使用Python内置函数,它不仅提供项,还提供当前索引,如下所示:

for index, item in enumerate(my_list):
   pass # do something
userlist.pop(userlist.index(-max([-u for u in userlist])))
因此,对于您的功能,您需要如下内容:

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
这:

  • 创建一个列表理解,它反转列表:
    [-u代表用户列表中的u]
  • 查找该列表的
    max
    imum(正常列表的最小值)
    max(…)
  • 在原始列表中查找第一个元素的索引,其值为最大值的负数
    userlist.index(-)
  • 最后弹出该元素
    userlist.pop(…)

瞧,不是一个
。移除
或一个
min

好吧,如果你的主要任务只是找出并删除某个列表中最小的项目,我的意思是不关心这些元素的顺序。也许你可以试试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
您可以继续,使用
heapq.heapop(alist)
,查找并删除剩余
alist
的第二个小元素(第三个小元素,第四个小元素,…),直到
索引器
升起(alist中没有任何内容):

如果继续<代码>索引器
引发:

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]: 
产出将是:

2
4
5
8
10
50
有一件事值得再次提及:

  • 如果您真正关心给定列表中元素的顺序, heapq不合适。
因为当您调用
heapq.heapify(alist)
时,这些元素的顺序已更改:

In [8]: alist = [10, 2, 4, 5, 8, 50]

In [9]: heapq.heapify(alist)

In [10]: alist
Out[10]: [2, 5, 4, 10, 8, 50]

这是一种简单的方法,没有任何复杂的循环和函数

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")

这是拼图吗?是否有任何不使用
的原因。是否删除
?或者您正在尝试实现优先级队列?找到最小值的位置,然后将其弹出,因为pop需要一个参数来决定要弹出哪个。@RayToal如果是拼图,正确的答案是:
userlist.pop(userlist.index(-max([-u代表userlist中的u]))
@legostrmtropr非常好,我特别喜欢模拟
min
max
+理解。不过,我仍然对这个问题感到困惑
pop
remove
非常相似,通过索引和值查找最小值似乎不是什么大事。很高兴知道问题的来源。除非我遗漏了什么,否则你不能用
min(userlist)
?@GP89替换
max([-u代表userlist中的u])
。@GP89两个要求之一是op不能使用
min
。哎呀,哈哈。我想我略读了课文。我错过了最重要的部分。我确实觉得有点奇怪:)
In [8]: alist = [10, 2, 4, 5, 8, 50]

In [9]: heapq.heapify(alist)

In [10]: alist
Out[10]: [2, 5, 4, 10, 8, 50]
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")