在Python中从列表中获取数据范围

在Python中从列表中获取数据范围,python,list,range,max,min,Python,List,Range,Max,Min,我有一组数据在列表中。我不知道如何创建一个函数,该函数可以获取数据的范围并返回元组中的最小值和最大值 数据: 我现在的代码是: def getrange(data): result=[] if i,c in data: range1 = min(data) range2 = max(data) result.append(range1, range2) return result 这是一个非常直截了当的问题,你的回答非常

我有一组数据在列表中。我不知道如何创建一个函数,该函数可以获取数据的范围并返回元组中的最小值和最大值

数据:

我现在的代码是:

def getrange(data):
    result=[]
    if i,c in data:
        range1 = min(data)
        range2 = max(data)
        result.append(range1, range2)
    return result 

这是一个非常直截了当的问题,你的回答非常接近。如果我下面的内容不正确,请编辑您的问题以反映您的需求

试试这个

def minmax(val_list):
    min_val = min(val_list)
    max_val = max(val_list)

    return (min_val, max_val)

语义

我有一组数据在列表中

这里要小心,您使用的python术语相互矛盾。在python中,既有集合也有列表。我可以告诉你这里的意思,但你将来可能会把人搞糊涂。请记住,在python集合中,元组和列表彼此不同

以下是区别(摘自21点评论)

不可变-实例化后无法更改数据类型

有序-数据类型中元素的顺序是持久的

唯一值-数据类型不能有重复值。

我喜欢一次获取多个百分位的功能:

import numpy as np
print np.percentile([1,3,4,463,2,3,6,8,9,4,254,6,72], [0, 100])
输出:

[   1.  463.]
(最小值为0%,最大值为100%)


如果您确实需要一个元组中的结果,您可以使用
元组(…)

轻松地将其包装。如果您希望获得数字的范围,您可以使用:

def getrange(numbers):
    return max(numbers) - min(numbers)
我还构建了以下代码,您可以使用这些代码查找平均值:

def average(numbers, type=None):
import statistics
try:
    statistics.mean(numbers)
except:
    raise RuntimeError('An Error Has Occured: List Not Specified (0018)')
if type == 'mean':
    return statistics.mean(numbers)
elif type == 'mode':
    return statistics.mode(numbers)
elif type == 'median':
    return statistics.median(numbers)
elif type == 'min':
    return min(numbers)
elif type == 'max':
    return max(numbers)
elif type == 'range':
    return max(numbers) - min(numbers)
elif type == None:
    return average(numbers, 'mean')
else:
    raise RuntimeError('An Error Has Occured: You Entered An Invalid Operation (0003)')
您只需键入
average([1,2,3])
即可获得1,2和3的平均值。对于其他命令,执行
average([1,2,3,'median')
,这将给出数字的中位数。您可以将中位数更改为:meanmodemedianminmaxrange我刚才这样做了:

>>>data = [1,3,4,463,2,3,6,8,9,4,254,6,72]
>>>min_val = min(data)
>>>max_val = max (data)
>>>range_data = (min_val, max_val)
>>>print(range_data)
(1, 463)

如果数据中的i,c:,那么这一行是什么??您的问题是仅仅返回作为元组的数据的最大值和最小值吗?不清楚“数据范围”是什么意思。你是指一个表示子列表的范围吗?你能举例说明你试图编写的函数的输入和所需的输出吗?你不是只想要
min(数据),max(数据)
?还是
min,maxs=sorted(list)[0],sorted(list)[-1]
谢谢你解决了我的问题,看起来好像是2*O(n)(我知道,我知道,big-o丢弃常量)因为扫描了两次iterable?(除非您知道数据是按排序顺序存储的)。不确定是否需要优化和扫描一次,跟踪最小值和最大值,OTOH可能在较低(更优化的级别)执行最小值()和最大值()?@DavidNeiss,你提出了一个很好的观点,这一点在Renai的回答中得到了概括。虽然看到解决方案的整体可伸缩性总是很好,但似乎忍者才刚刚起步,仍然在学习python的基础知识。我的回答是帮助他意识到他不需要
结果
列表或 if语句。@AustinA Renai的答案仍然是对列表进行两次排序。一个简单的优化单行程序是:
min,max=sorted(data)[::len(data)-1]
元组和集合不是同义词。元组是有序的、不可变的,可以多次包含相同的值。集合是无序的、可变的,每个值都是唯一的。欢迎使用堆栈溢出!虽然这段代码可以解决这个问题,但如何以及为什么解决这个问题将真正有助于提高帖子的质量,以及y会导致更多的上升票。记住,你是在为将来的读者回答问题,而不仅仅是现在的提问者。请你的回答添加解释,并说明适用的限制和假设。人们通常在说“平均”时谈论平均数当然,绝对不要讨论范围或最小/最大值。也就是说,计算平均值与最初的问题无关。
def average(numbers, type=None):
import statistics
try:
    statistics.mean(numbers)
except:
    raise RuntimeError('An Error Has Occured: List Not Specified (0018)')
if type == 'mean':
    return statistics.mean(numbers)
elif type == 'mode':
    return statistics.mode(numbers)
elif type == 'median':
    return statistics.median(numbers)
elif type == 'min':
    return min(numbers)
elif type == 'max':
    return max(numbers)
elif type == 'range':
    return max(numbers) - min(numbers)
elif type == None:
    return average(numbers, 'mean')
else:
    raise RuntimeError('An Error Has Occured: You Entered An Invalid Operation (0003)')
>>>data = [1,3,4,463,2,3,6,8,9,4,254,6,72]
>>>min_val = min(data)
>>>max_val = max (data)
>>>range_data = (min_val, max_val)
>>>print(range_data)
(1, 463)