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

时间:2018-02-17 09:19:07

标签: python 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行。

5 个答案:

答案 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)

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

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)

enter image description here