【问题标题】:Python find number steps to allocate values to elements in listPython查找编号步骤以将值分配给列表中的元素
【发布时间】:2015-10-11 07:18:42
【问题描述】:

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

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

【问题讨论】:

  • 所以你的输出应该是[2,2,2,2,2] ?
  • mean 为 2,中位数为 1。将[1, 1, 1, 1, 6] 变为[2, 2, 2, 2, 2] 所需的“移动次数”如何等于 4?需要进行五项更改。
  • 我知道输出,但我想编写算法来找出需要多少步骤才能使所有内容相同
  • 抱歉我打错了它的意思不是中值你的权利@BrianO
  • 你不是已经算法了吗?你是如何解决这个例子的?这样看:您展示的四个步骤中遵循的过程是什么?

标签: python algorithm list


【解决方案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 次“移动”。

如果您实际上是指“中位数”, 将是一个整数,则以下方法有效:

from math import ceil

median = sorted(lst)[len(lst)//2]
diffs = [abs(k - median)) for k in lst]
num_moves = max(diffs)

【讨论】:

  • 如果我对“移动”的解释有误,请告诉我,我会修改或取消答案。
  • 感谢使用它的提示我得到了答案
  • Yw...我仍然不确定什么是“移动”!答案正确还是不完全?
  • 我认为我没有很好地解释我需要的问题和解决方案,无论如何感谢@Briano 的提示
  • 我明白了,还是更复杂。好的。
【解决方案2】:
packets=[]
flag=True
while(flag):
    packet=input()
    candies=[]
    if packet == -1:
        flag= False
    else:
        for i in range(0,packet):
            candy=input()
            candies.append(candy)
        packets.append(candies)
for candies in packets:
    count = 0
    sum_candy = sum(candies)
    length = len(candies)
    if sum_candy%length==0:
        for ele in candies:
            if ele > (sum_candy/length) :
                diff = ele -(sum_candy/length)
                count += diff
        print count
    else:
        print "-1"`enter code here`

【讨论】:

    猜你喜欢
    • 2022-12-05
    • 2014-02-14
    • 2019-01-14
    • 2019-02-06
    • 2022-12-13
    • 2016-04-21
    • 2020-06-22
    • 2020-06-09
    • 1970-01-01
    相关资源
    最近更新 更多