Python find number 步骤将值分配给列表中的元素

标签 python algorithm list

我正在尝试为列表中的元素重新分配值,并尝试找出需要执行的步骤。

例如我在列表 [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/

相关文章:

python - 如何使用 networkx + python 枚举图中所有*最大*派系?

java - 查找数字中连续一位的最大数量(Java)

css - 如何覆盖 *{list 样式 :none} property

python - index() 方法不接受 None 作为开始/停止

python - 在 PyQt 中调整窗口大小后如何继续在图像上绘图?

python - Django 迁移被杀死

list - F#:递归函数:测试元素是否是给定列表的成员

python - 如何提高 Google App Engine 上 request_logs 的吞吐量

algorithm - 为什么插入排序 Θ(n^2) 在一般情况下?

java - 迭代器可以从列表中删除不等于特定值的项目吗?