繁体   English   中英

如何在预定义的集合列表中获取最小值(在python 3.x中)?

[英]How to get minimum value in predefined set list (in python 3.x)?

如何在python 3.x中的预定义集合列表中获得最小值?

我有一个数据列表“ a”

a = {44.1, 78.2, 74.2, 85.4, 107.6, 167.7, 221.6, 245.2, 299.2, 314.5}

我想获得连续3个数据范围的最小值,从最后三个开始,一直到前三个数据。

前三个(245.2、299.2、314.5),后三个(221.6、245.2、299.2),后三个(167.7、221.6、245.2)的最小值,依此类推,直到前三个(44.1、78.2、74.2)。 最小值也应成为列表。

这是我尝试过但失败的。

i = list(range(-1, -10, -1))
value = min(a[i - 3:i])
print(value)

我得到这个错误

TypeError: unsupported operand type(s) for -: 'list' and 'int'

在第2行。

由于集合是无序的,因此您应该创建a列表,这是一个有序的数据结构:

>>> a = [44.1, 78.2, 74.2, 85.4, 107.6, 167.7, 221.6, 245.2, 299.2, 314.5]

由于要从头开始,因此还需要反转此列表:

>>> a = a[::-1]
>>> a 
[314.5, 299.2, 245.2, 221.6, 167.7, 107.6, 85.4, 74.2, 78.2, 44.1]

然后,您可以将列表分成3组,并为每组获取最小值:

>>> [min(x) for x in zip(a, a[1:], a[2:])]
[245.2, 221.6, 167.7, 107.6, 85.4, 74.2, 74.2, 44.1]

基于@RoadRunner的答案:

您想要移动至少3个连续数字...

a = [44.1, 78.2, 74.2, 85.4, 107.6, 167.7, 221.6, 245.2, 299.2, 314.5]
a.reverse()
[min(a[i:i+3]) for i in range(0, len(a) - 2)]

使用-2 ,可确保始终有3个数字。

从使用Pandas DataFrame开始。 DataFrame中的一项操作是“滚动”的想法(一次获取X并对其进行处理)

import pandas as pd
data = pd.DataFrame([44.1, 78.2, 74.2, 85.4, 107.6, 167.7, 221.6, 245.2, 299.2, 314.5])
answer = data.rolling(3).min()

如果您想从头开始,只需反转列表即可(我知道您那里有一个set(),但这并不是一个好的数据结构)

这是使用bottleneck.move_min一种方式:

from bottleneck import move_min

a = [44.1, 78.2, 74.2, 85.4, 107.6, 167.7, 221.6, 245.2, 299.2, 314.5]
a = a[::-1]

list(move_min(a, window=3)[2:])

# [ 245.2,  221.6,  167.7,  107.6,   85.4,   74.2,   74.2,   44.1]

bottleneck算法基于Richard Harter的滑动窗口算法的O( n最小值 还可以使用 O(1)算法。

试试这个代码! 另外,我附上输出的屏幕截图。

a = [44.1, 78.2, 74.2, 85.4, 107.6, 167.7, 221.6, 245.2, 299.2, 314.5]
a.reverse()
ans=[]
for i in range(0,len(a)-2):
  ans.append(min(a[i:i+3]))
print(ans)

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM