如何在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行。
答案 0 :(得分:3)
由于集合是无序的,您应该使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]
答案 1 :(得分:1)
基于@RoadRunner回答:
您希望移动最少3个连续数字......
BroadcastReceiver
使用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)]
,您可以确保始终拥有3个号码。
答案 2 :(得分:1)
使用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(),但这不是一个好的数据结构)
答案 3 :(得分:1)
这是使用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 )The minimum on a sliding window algorithm。 O(1)算法是also available。
答案 4 :(得分:0)