如何排除一分钟和一个最大数字?

时间:2015-10-16 10:16:21

标签: python python-2.7

我有清单:

numbers = [2,3,1,6,5]

我必须删除一分钟和一个最大数字:

sorted(numbers)[1:-1]

这没关系,但我希望获得更多信息 - 原始列表中删除号码的位置:

remains = sorted(numbers)[1:-1]
min_number_position = 2
max_number_position = 3

怎么做?数字可以重复。

4 个答案:

答案 0 :(得分:2)

只需使用VirtualMachineErrormin函数与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))