我正在尝试为列表中的元素重新分配值,并尝试找出需要执行的步骤。
例如我在列表 [1,1,1,1,6] 中有 5 个元素,平均值是 2
我想替换所有元素 [2,2,2,2,2]
这需要 4 步才能完全相同。
First Step [1,1,1,1,6] -> [2,1,1,1,5]
Second Step [2,1,1,1,5] -> [2,2,1,1,4]
Third Step [2,2,1,1,4] -> [2,2,2,1,3]
Fourth Step [2,2,2,1,3] -> [2,2,2,2,2]
我无法为此编写算法。感谢任何帮助或提示。
这是我获取输入的 python 代码:
test_cases=input()
packets=[]
candies=[]
for _ in range(test_cases):
packet=input()
for i in range(0,packet):
candy=input()
candies.append(candy)
print candies
if sum(candies)%packet==0:
print (sum(candies)/packet),"mean"
else:
print "-1"
最佳答案
它看起来像你所说的“移动”,列表中元素与平均值的最大差异。因此:
from math import ceil
mean = sum(lst)/len(lst)
diffs = [ceiling(abs(k - mean)) for k in lst]
num_moves = max(diffs)
但是,我不确定您的意思是“均值”:) 整数列表的均值通常不是整数。您认为从 3.5 到 5 需要多少“步数”——需要 1 步还是 2 步“步数”?以上假设需要 2 个“ Action ”。
如果您实际上指的是“中位数”,将是一个整数,则以下方法有效:
from math import ceil
median = sorted(lst)[len(lst)//2]
diffs = [abs(k - median)) for k in lst]
num_moves = max(diffs)
关于Python find number 步骤将值分配给列表中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33062515/