def sliding_average(lst, window_size):
result = []
window_sum = sum(lst[:window_size])
result.append(window_sum / window_size)
for i in range(window_size, len(lst)):
window_sum += lst[i] - lst[i - window_size]
result.append(window_sum / window_size)
return result
# 示例
data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
print(sliding_average(data, 5)) # 输出 [3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0]
print(sliding_average(data, 10)) # 输出 [5.5, 6.5, 7.5, 8.5, 9.5, 10.5, 11.5, 12.5, 13.5, 14.5, 15.5]
print(sliding_average(data, 20)) # 输出 [10.5]
回答参考Chatgpt3.5
def sliding_window_average(data, window_width):
result = []
window_sum = 0
window_start = 0
for i, value in enumerate(data):
window_sum += value
if i >= window_width:
window_sum -= data[i - window_width]
window_start += 1
if i + 1 >= window_width:
average = window_sum / window_width
result.append(average)
return result
这个函数接受两个参数:data 是输入数据的列表,window_width 是窗口宽度。它返回一个列表,包含了根据窗口宽度计算得到的滑动窗口平均值。
使用这个函数,你可以传入不同的数据和窗口宽度来获取相应的平均值。以下是一个简单的例子:
```python
data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
window_width = 3
result = sliding_window_average(data, window_width)
print(result) # 输出 [2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0]
```
在这个例子中,输入数据是 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],窗口宽度为 3。函数计算出滑动窗口平均值为 [2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0] 并打印输出。
你可以根据需要修改输入数据和窗口宽度来进行实验,验证代码的效果。希望这个示例对你有帮助!如果有任何其他问题,请随时提问。
这个很简单,所谓滑动的意思就是弄出一个队列,队列长度比如说是5
每次读入一个新的数字,让最小的出队,对队列求平均数
data = [2,6,4,1,2,7,1,2,10,3,5,6,8,7,1]
queue = []
window_size = 5
for element in data:
queue.append(element) # 将元素加入队尾
if len(queue) > window_size:
queue.pop(0) # 最早加入的元素出队
if len(queue) == window_size:
average = sum(queue) / window_size
print("平均值为:", average)
平均值为: 3.0
平均值为: 4.0
平均值为: 3.0
平均值为: 2.6
平均值为: 4.4
平均值为: 4.6
平均值为: 4.2
平均值为: 5.2
平均值为: 6.4
平均值为: 5.8
平均值为: 5.4
参考GPT:
def sliding_average(nums, window_size):
"""
计算滑动算数平均值
:param nums: 数组
:param window_size: 滑动窗口大小
:return: 滑动算数平均值数组
"""
if window_size <= 0 or window_size > len(nums):
raise ValueError("滑动窗口大小不合法")
window_sum = sum(nums[:window_size])
averages = [window_sum / window_size]
for i in range(window_size, len(nums)):
window_sum += nums[i] - nums[i - window_size]
averages.append(window_sum / window_size)
return averages
# 测试
nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(sliding_average(nums, 5)) # [3.0, 4.0, 5.0, 6.0, 7.0, 8.0]
print(sliding_average(nums, 10)) # [5.5, 6.5, 7.5]
print(sliding_average(nums, 20)) # ValueError: 滑动窗口大小不合法
该函数接收一个数组和一个滑动窗口大小,计算出滑动算数平均值数组并返回。在实现中,我们先检查滑动窗口大小是否合法,然后计算出第一个滑动算数平均值并将其添加到结果数组中。接着,我们从第 window_size
个元素开始遍历数组,每次计算当前窗口内元素的和并除以窗口大小,得到当前的滑动算数平均值,并将其添加到结果数组中。最后返回结果数组即可。
在测试中,我们定义了一个数组 nums
,并分别计算了滑动窗口大小为5、10和20的滑动算数平均值。运行结果如下:
[3.0, 4.0, 5.0, 6.0, 7.0, 8.0]
[5.5, 6.5, 7.5]
ValueError: 滑动窗口大小不合法
可以看到,滑动窗口大小为5和10时,输出了对应的滑动算数平均值数组。而当滑动窗口大小为20时,由于超出了数组的长度,函数抛出了一个 ValueError
异常。
class MyClass:
def __init__(self):
self.value = 0
'''
def __gt__(self, other):
return self.value > other.value
'''
def __lt__(self, other):
return self.value > other.value
my1 = MyClass()
my1.value = 20
my2 = MyClass()
my2.value = 10
my3 = MyClass()
my3.value = 30
a = [my1, my2, my3]
print(a)
import operator
# a.sort()
a.sort(key=operator.attrgetter('value'))
b = sorted(a, key=operator.attrgetter('value'))
print(a[0].value)
print(a[1].value)
print(a[2].value)
print(b[0].value)
[<__main__.MyClass object at 0x00000205D1AB5DA0>, <__main__.MyClass object at 0x00000205D1AB5668>, <__main__.MyClass object at 0x00000205D1AB5D68>]
10
20
30
10