我有一个文本文件,其中有1084个元素。我列出了他们。
import csv
a = []
with open('example.txt', 'r') as csvfile:
file_name = csv.reader(csvfile, delimiter='\t')
for row in file_name:
a.append(int(row[1]))
print(a)
[144, 67, 5, 23, 64...456, 78, 124]
接下来,我需要取列表中每100个元素的平均值,取最后84个元素的平均值,并将其带入新列表。 我到底该怎么做?也许是numpy?
答案 0 :(得分:1)
这将在Python 3中起作用,因为您将print
编写为函数,所以我假设您正在使用Python 3。在Python 2中,您需要确保该除法是浮点除法。
# a = [...]
# Separate the groups. The last slice will be fine with less than 100 numbers.
groups = [a[x:x+100] for x in range(0, len(a), 100)]
# Simple math to calculate the means
means = [sum(group)/len(group) for group in groups]
如果您确实想在Python 2中执行此操作,则可以将最后一行的len(group)
替换为float(len(group))
,以便强制进行浮点除法;或者,您可以添加模块的from __future__ import division
at the top,尽管这样做会改变整个模块的效果,而不仅仅是这一行。
这是一个很好的,可重复使用的版本,可与迭代器一起使用,它本身就是生成器:
from itertools import islice
def means_of_slices(iterable, slice_size):
iterator = iter(iterable)
while True:
slice = list(islice(iterator, slice_size))
if slice:
yield sum(slice)/len(slice)
else:
return
a = [1, 2, 3, 4, 5, 6]
means = list(means_of_slices(a, 2))
print(means)
# [1.5, 3.5, 5.5]
您不应使代码的通用性超出实际需求,但为了获得额外的经验值,您可以使代码更加通用和可组合。上面的内容足以供您使用。
答案 1 :(得分:0)
简单地,切块并获得平均值。
import math
averages = []
CHUNK_SIZE = 100
for i in range(0, math.ceil(len(a) / CHUNK_SIZE)):
start_index = i * CHUNK_SIZE
end_index = start_index + CHUNK_SIZE
chunk = a[start_index:end_index]
averages.append(sum(chunk)/len(chunk))
答案 2 :(得分:-1)
您可以使用senderle的配方How do you split a list into evenly sized chunks?在基本Python中执行此操作:
a = range(1,1084)
from itertools import islice
def chunk(it, size):
it = iter(it)
return iter(lambda: tuple(islice(it, size)), ())
means = [sum(chk)/len(chk) for chk in chunk(a, size=100)]
# [50.5, 150.5, 250.5, 350.5, 450.5, 550.5, 650.5, 750.5, 850.5, 950.5, 1042.0]