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]]
关于用于解决此问题的每个项目的一些阅读材料:
它应该是这样工作的:
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[
到littlemaxV=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)