尝试从数组中的二维列表中删除最小值和最大值。 我的代码:
myList = [[1, 3, 4], [2, 4, 4], [3, 4, 5]]
maxV = 0
minV = myList[0]0]
for list in myList:
for innerlist in list:
if innerlist > maxV:
maxV = innerlist
if innerlist < minV:
minV = innerlist
innerlist.remove(maxV)
innerlist.remove(minV)
print(myList)
这引起了我一些错误,我并不特别理解。我非常确定内部列表不是数组而是普通变量。但我仍然认为应该以某种方式从二维列表中删除min和max元素。 我的意思是我需要删除列表中最高和最低值的每个内部列表。 LF帮忙! 问候。
答案 0 :(得分:11)
只是为了使用list comprehensions
,sorted
方法和slicing
显示更简单的方法:
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的this回答非常好。
答案 1 :(得分:3)
如果要删除所有匹配项,则必须找到min和max并从每个子列表中删除所有匹配项:
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)
即使您自己的逻辑工作并且您想要删除所有等于max的元素,它也无法使用remove,因为它只会删除每次出现的第一次。
In [8]: l = [1,2,3,4,4]
In [9]: l.remove(4)
In [10]: l
Out[10]: [1, 2, 3, 4]
基于您的一条评论,您的子列表中似乎有字符串,与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 :(得分:0)
尝试这种方法:
foreach innerlist:
答案 3 :(得分:0)
它应该像这样工作:
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)
你的错误在哪里:
minV = myList[0]0]
a [
to little maxV = 0
仅在列表始终为正maxV
和minV
应位于第一个循环内innerlist.remove(maxV)
应为list.remove(maxV)
我还将innerList重命名为value
答案 4 :(得分:-1)
取消你的移除,将它们带出循环并且:
maxV = -10000000
minV = 10000000 # !!