[英]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)算法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.