我需要一个向量,用于存储主列表“ v”的中值的中值。我已经尝试使用以下代码进行操作,但是我只能以正确的方式编写一些值。
v=[1,2,3,4,5,6,7,8,9,10]
final=[]
nfac=0
for j in range (0,4):
nfac=j+1
for k in range (0,nfac):
if k%2==0:
final.append(v[10/2**(nfac)-1])
else:
final.append(v[9-10/2**(nfac)])
v = [1,2,3,4,5,6,7,8,9,10]中的第一个中位数是5
然后,我想要其余子列表[1,2,3,4]和[6,7,8,9,10]的中位数。即2和8。依此类推。
列表“ final”必须采用以下格式:
final = [5,2,8,1,3,6,9,4,7,10]
答案 0 :(得分:1)
请注意,您定义的任务基本上等效于从数组构造a binary heap。
绝对先定义一个用于查找中位数的辅助函数:
def split_by_median(l):
median_ind = (len(l)-1) // 2
median = l[median_ind]
left = l[:median_ind]
right = l[median_ind+1:] if len(l) > 1 else []
return median, left, right
按照您给出的示例,您要以广度优先的方式处理结果子列表,因此我们需要一个队列来记住以下任务:
from collections import deque
def construct_heap(v):
lists_to_process = deque([sorted(v)])
nodes = []
while lists_to_process:
head = lists_to_process.popleft()
if len(head) == 0:
continue
median, left, right = split_by_median(head)
nodes.append(median)
lists_to_process.append(left)
lists_to_process.append(right)
return nodes
因此最终调用了该函数:
print(construct_heap([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])) # [5, 2, 8, 1, 3, 6, 9, 4, 7, 10]
print(construct_heap([5, 1, 2])) # [2, 1, 5]
print(construct_heap([1, 0, 0.5, -1])) # [0, -1, 0.5, 1]
print(construct_heap([])) # []
答案 1 :(得分:0)
在内置的statistics
模块中,有一个函数可以获取列表的中位数,然后尝试一下。