使数组中的所有值更接近

2024-10-01 00:21:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要做的是将l1中的值“压碎”一些百分比,以便它们更接近,这样,如果数组l1是。。。你知道吗

l1 =[10,20,30,40,50,60,70,80,90,100]

那么l2可能是。。。

l2 = [12.5, 25.0, 37.5, 50.0, 62.5, 45.0, 52.5, 60.0, 67.5, 75.0]

这可以在一个简单的脚本上完成,例如。。。你知道吗

for i in l1:
    if i <= 50:
        i = (i*1.25)
        l2.append(i)
        print(i)
    elif i >= 50:
        i = (i*0.75)
        l2.append(i)

print (l2)

因此,这意味着我需要把所有的项目更紧密地放在一起-理想的百分位(印刷)。当你有这样一个列表的时候问题就出现了。。。你知道吗

l1 =[4,2,3,4,3,6,4,8.6,10,7,12,4,14,15,26,14,15,16,10]

然后,我需要做的是将所有的项分散地(以一定的百分比)放在一起,但是在一个循环中。我需要“压缩”或“压碎”数组的值,缩小每个数字之间的范围,从最小到最大,从最大到最小(接近中间值)。我不能只除以整个列表,因为范围保持不变。你知道吗

我认为一种方法(我现在正在研究)是(a)找到l1的中间值,(b)从l1中最小和最大的项目开始,增加该项目价值的10%,或减少该项目价值的10%(在最大项目的情况下),然后处理同一循环中的第二小项和最大项(以避免脚本两次遍历同一个“较小的变量”)。你知道吗

这意味着列出从最大到最小的值,同时保持它们在数组中的位置(这很重要),然后搜索该列表并对数组l1的每个对应值进行更改。你知道吗

请注意提议的解决方案。。。一次迭代。。。你知道吗

import statistics
a = [4, 3, 3, 4, 5, 1, 31, 321]
input_scope = 1.1

def scouter (input_list, scope):
    mean = statistics.mean(input_list)
    searchpositions = []
    for x, i in enumerate(input_list):
            print (x, i)
            if i == max(input_list) or i == min(input_list):
                searchpositions.append(x)

    for i in searchpositions:
        input_list[i] = [(input_list[i] - mean) / scope + mean]
    return (input_list)
print(scouter((a), input_scope))

给了我我需要的,有点。。。你知道吗

[4, 3, 3, 4, 5, [5.13636363636364], 31, [296.0454545454545]]

输出是列表中的列表!有没有一种简单的方法可以通过重新编写函数来消除这个问题?你知道吗


Tags: 项目inl1列表forinput数组mean
2条回答

只是向中间点靠拢?你知道吗

>>> l1 = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]

>>> import statistics
>>> median = statistics.median(l1)
>>> [(x - median) / 10 + median for x in l1]
[50.5, 51.5, 52.5, 53.5, 54.5, 55.5, 56.5, 57.5, 58.5, 59.5]

为什么不在你的单子里找出最低的数字,然后把整个单子除以那个数字呢?或者任何你想要的号码。你知道吗

num = percentage/100 # gets you a decimal
l2 = [x*num for x in l1]

如果您想这样做,请使用min()查找列表中的最低数字。你知道吗

相关问题 更多 >