Python 删除数字列表的最大和最小副本
我只想删除列表的最大和最小副本 数字。示例:(114 4 5 68 8)结果:(14 5 6 8) 如何将max()min()函数与Python 删除数字列表的最大和最小副本,python,Python,我只想删除列表的最大和最小副本 数字。示例:(114 4 5 68 8)结果:(14 5 6 8) 如何将max()min()函数与列表(set(x))组合 还是有别的办法 s = raw_input("Please Input a series of numbers") numbers = map(int, s.split()) numbers.remove(max(numbers)) numbers.remove(min(numbers)) average = sum(numbers)/f
列表(set(x))
组合
还是有别的办法
s = raw_input("Please Input a series of numbers")
numbers = map(int, s.split())
numbers.remove(max(numbers))
numbers.remove(min(numbers))
average = sum(numbers)/float(len(numbers))
print average
下面是使用一些
itertools
函数对该问题的一般解决方案。该解决方案将最小值和最大值的重复折叠为单个值,无论重复出现在何处:
from itertools import groupby,starmap,chain
#first we count the sequence length for each group of number in the list
c=[[number,len(list(seq))] for number,seq in groupby(numbers)]
print(c)
#we collapse the repetitions only for min and max
for group in c:
if group[0] == min(numbers) or group[0]== max(numbers):
group[1]=1
print(c)
#we put back the list together
numbers=list(chain(*starmap(lambda x,n : [x]*n, c)))
print(numbers)
示例输出:
>>>numbers=[1,1,1,4,4,5,6,8,8,8]
[1, 4, 4, 5, 6, 8]
>>>numbers=[4,4,1,1,1,5,6,8,8,8]
[4, 4, 1, 5, 6, 8]
#edge case if there are multiple groups of min :
>>>numbers=[4,4,1,1,1,5,1,1,1,6,8,8,8]
[4, 4, 1, 5, 1, 6, 8]
列表是否总是排序?必须保持顺序?对OPhint的开放性问题太多。你需要一个循环。我会发布一个正确的答案,如果重新开放的话。作为将来的参考,这里的人不喜欢“吃我的问题”之类的问题。你应该始终表现出你自己已经努力解决了这个问题。展示一次尝试,展示预期结果与实际结果,给出一个理论(如果有)示例数据已排序,这允许使用与未排序数据不同(且更简单)的方法:从前面和后面删除正确数量的元素。因此,说明是否可以依赖数据进行排序,如果不能,结果的顺序是否需要与输入的顺序相同,这可能是一个好主意。请通过添加解释来改进此答案
>>>numbers=[1,1,1,4,4,5,6,8,8,8]
[1, 4, 4, 5, 6, 8]
>>>numbers=[4,4,1,1,1,5,6,8,8,8]
[4, 4, 1, 5, 6, 8]
#edge case if there are multiple groups of min :
>>>numbers=[4,4,1,1,1,5,1,1,1,6,8,8,8]
[4, 4, 1, 5, 1, 6, 8]