簡體   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