我有清单:
numbers = [2,3,1,6,5]
我必须删除一分钟和一个最大数字:
sorted(numbers)[1:-1]
这没关系,但我希望获得更多信息 - 原始列表中删除号码的位置:
remains = sorted(numbers)[1:-1]
min_number_position = 2
max_number_position = 3
怎么做?数字可以重复。
答案 0 :(得分:2)
只需使用VirtualMachineError
和min
函数与max
列表方法配合即可获得排名:
index
答案 1 :(得分:1)
通过创建arg排序数组(由numpy.argsort()
创建)的纯python解决方案。示例 -
numbers = [2,3,1,6,5]
argsorted = sorted(range(len(numbers)),key=lambda x:numbers[x])
maxpos,minpos = argsorted[-1],argsorted[0]
remains = [numbers[i] for i in argsorted[1:-1]]
演示 -
>>> numbers = [2,3,1,6,5]
>>> argsorted = sorted(range(len(numbers)),key=lambda x:numbers[x])
>>> argsorted
[2, 0, 1, 4, 3]
>>> maxpos,minpos = argsorted[-1],argsorted[0]
>>> remains = [numbers[i] for i in argsorted[1:-1]]
>>> remains
[2, 3, 5]
>>> maxpos
3
>>> minpos
2
如果您可以使用numpy
库,则可以使用array.argsort()
轻松完成此操作。示例 -
nnumbers = np.array(numbers)
nnumargsort = nnumbers.argsort()
minpos,maxpos = nnumargsort[[0,-1]]
remains = nnumbers[nnumargsort[1:-1]]
演示 -
In [136]: numbers = [2,3,1,6,5]
In [137]: nnumbers = np.array(numbers)
In [138]: nnumargsort = nnumbers.argsort()
In [139]: minpos,maxpos = nnumargsort[[0,-1]]
In [140]: remains = nnumbers[nnumargsort[1:-1]]
In [141]: remains
Out[141]: array([2, 3, 5])
In [142]: maxpos
Out[142]: 3
In [143]: minpos
Out[143]: 2
答案 2 :(得分:1)
>>> sorted(enumerate(numbers), key=operator.itemgetter(1))
[(2, 1), (0, 2), (1, 3), (4, 5), (3, 6)]
其余部分留给读者练习。
答案 3 :(得分:0)
您可以使用函数并使用list.index
方法返回max和min的索引:
>>> def func(li):
... sorted_li=sorted(li)
... return (li.index(sorted_li[0]),sorted_li[1:-1],li.index(sorted_li[-1]))
...
>>> min_number_position,remains,max_number_position=func(numbers)
>>> min_number_position
2
>>> remains
[2, 3, 5]
>>> max_number_position
3
在python 3.X中,你可以使用解包赋值:
>>> def func(li):
... mi,*re,ma=sorted(li)
... return (li.index(mi),re,li.index(ma))