Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/345.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.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_Arrays_List_Max_Min - Fatal编程技术网

Python从二维列表中删除元素

Python从二维列表中删除元素,python,arrays,list,max,min,Python,Arrays,List,Max,Min,正在尝试从数组中的二维列表中删除最小值和最大值。 我的代码: myList=[[1,3,4]、[2,4,4]、[3,4,5]] maxV=0 minV=myList[0]0] 对于myList中的列表: 对于列表中的innerlist: 如果innerlist>maxV: maxV=innerlist 如果innerlist最大值: maxV=innerlist 如果值

正在尝试从数组中的二维列表中删除最小值和最大值。 我的代码:

myList=[[1,3,4]、[2,4,4]、[3,4,5]]
maxV=0
minV=myList[0]0]
对于myList中的列表:
对于列表中的innerlist:
如果innerlist>maxV:
maxV=innerlist
如果innerlist
这给我带来了一些错误,我并不特别理解。我很确定innerlist不是数组,而是普通变量。但我仍然认为从二维列表中删除最小和最大元素应该是可能的。 我的意思是,我需要删除列表中每个内部列表中的最高值和最低值。 如果有人帮忙!
注意。

取消删除,将其从循环中取出,然后:

maxV = -10000000
minV = 10000000   # !!

为了显示使用
列表理解
执行此操作的更简单方法,
排序
方法和
切片

d = [[1, 3, 4], [2, 4, 4], [3, 4, 5]]

n = [sorted(l)[1:-1] for l in d]

print(n)

# [[3], [4], [4]]
关于用于解决此问题的每个项目的一些阅读材料:

为了处理副本,Padraic的回答做得很好

试试这种方法:

foreach innerlist:

  • 对数组进行排序
  • 移除第一个元素
  • 删除最后一个元素

  • 它应该是这样工作的:

    myList = [[1, 3, 4], [2, 4, 4], [3, 4, 5]]
    for list in myList:
       maxV = list[0] #initialise them here
       minV = list[0] #because you look for max in list
       for value in list:
          if value> maxV:
             maxV = innerlist
          if value< minV:
             minV = innerlist
       list.remove(maxV) #remove from list
       list.remove(minV)
    print(myList)
    
    myList=[[1,3,4]、[2,4,4]、[3,4,5]]
    对于myList中的列表:
    maxV=list[0]#在此处初始化
    minV=list[0]#因为您在列表中查找max
    对于列表中的值:
    如果值>最大值:
    maxV=innerlist
    如果值<最小值:
    minV=innerlist
    列表。删除(maxV)#从列表中删除
    列表。删除(minV)
    打印(myList)
    
    您的错误包括:

  • minV=myList[0]0]
    a
    [
    到little
  • maxV=0
    仅当列表始终为正时有效
  • maxV
    minV
    应位于第一个循环内
  • innerlist.remove(maxV)
    应该是
    list.remove(maxV)

  • 我还将innerList重命名为value

    如果要删除所有引用,则必须找到最小值和最大值,并从每个子列表中删除所有引用:

    def remove(l):
        for sub in l:
            t = {min(sub), max(sub)}
            sub[:] = (ele for ele in sub if ele not in t)
    
    
    l = [[1, 3, 4], [1, 2, 4, 4], [3, 4, 5]]
    
    remove(l)
    
    这将给你:

    [[3], [2], [4]]
    
    要在单个过程中查找最小值和最大值,可以使用辅助函数:

    def min_max(sub):
        # all numbers are > float("-inf") and < float("inf")
        mx, mn = float("-inf"), float("inf")
        for ele in sub:
            if ele < mn:
                mn = ele
            if ele > mx:
                mx = ele
        return {mn, mx}
    
    def remove(l):
        for sub in l:
            # find min and max
            mn_mx = min_max(sub)
            # update sublist so all occurrences of either are removed
            sub[:] = (ele for ele in sub if ele not in mn_mx)
    
    根据您的一条注释,您的子列表中似乎有字符串,与int比较时会出错,如果字符串始终是第一个可以将其切掉的元素:

       from itertools import islice
    
       def remove(l):
            for sub in l:
                sub = sub[1:]
                mn_mx = min_max(sub)
                sub[:] = (ele for ele in sub if ele not in mn_mx)
    

    重复项呢?例如,操作后中间列表是否应该为空,因为有2个“高”值?
    innerlist
    不是一个列表;它是一个整数。
    myList
    list
    是您仅有的列表。但是4等于最大值非常感谢!如果我的数组以字符串元素开始,并且我已经读过排序,我知道(假设have list d=[[xa],1,3,4],“la”,2,4,4],“ta”,3,4,5]])n=[sorted(l)[2:-1]for l in d]应取自数组中的第二个元素,但仍然会出错,似乎他仍在尝试对字符串排序:(@KarolisŠiaulys,您正在将排序后的列表切片到原始列表,如果.2:-1也从第三个而不是第二个开始,那么在python2中,字符串将被排序到列表的末尾,因此当您
    排序(l)[2:-1]
    时,您仍然有最大值,如果您想删除字符串和最大值使用
    排序(l),则会丢失两个最低的整数[1:-2]
    ,您还应该注意,使用python 3进行排序或任何比较都会导致
    无序类型
    错误,因为如果您想从整数中删除一个值,则无法将字符串与intUnindenting进行比较。此外,将minV设置为第一个元素也会起作用,而大-和+值则不会提供安全性。您应该使用
    sys.maxint
    In [8]: l = [1,2,3,4,4]
    
    In [9]: l.remove(4)
    
    In [10]: l
    Out[10]: [1, 2, 3, 4]
    
       from itertools import islice
    
       def remove(l):
            for sub in l:
                sub = sub[1:]
                mn_mx = min_max(sub)
                sub[:] = (ele for ele in sub if ele not in mn_mx)