将一个列表乘以一个数字,直到列表中的所有数字都大于等于1

2024-04-23 18:18:15 发布

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

我想用一个数乘以y_list,直到列表中的所有数都是>=1, 然后只打印新列表(如果可能的话,不使用Numpy)。你知道吗

可以将y_list乘为行,将i_list=[range(1,20)]中的数字乘为列。当所有数字都大于1时停止。你知道吗

例如:y_list= [1.0, 0.5669650111879195]until y_list=[2.0, 1.12.. ]

y_list= [1.0, 0.5669650111879195]
i=0
while all(y <= 1 for y in y_list):
    i+=1
    if all(y<= 1 for y in y_list):
        break
    print(i)

Tags: innumpy列表forifrange数字all
3条回答

最简单的方法是将整个列表乘以最小项的倒数。这将使第1项和其余部分成为其中的一个因素:

inverse_min = min(y_list) ** -1
for int in y_list:
    print int * inverse_min

关于repl.it的例子

如果您确实需要将它乘以一个数(假设它是1.3),直到所有元素都大于一,那么以下是方法:

y_list = [1.0, 0.1, 0.2, 0.01]
k = 1.3
while any(y<=1 for y in y_list):
    y_list = [y*k for y in y_list]

>>> print(y_list)
[112.45540695195751, 11.245540695195746, 22.491081390391493, 1.1245540695195746]

在这种情况下,我建议使用加法而不是乘法,因为处理器的加法比乘法快得多。你知道吗

请看What's the relative speed of floating point add vs. floating point multiply

假设我们的示例数据是[-0.4, 1.0, 0.5669650111879195]

y_list= [-0.4, 1.0, 0.5669650111879195]

y_factor = 0
y_min = min(y_list)
if y_min < 1:
    y_factor = 1.0000000000001 - y_min

y_list = [x+y_factor for x in y_list]

print (y_list)

输出:

[1.0000000000001, 2.4000000000001, 1.9669650111880195]

我们得到的数组元素至少大于或等于1。见https://repl.it/EDog/0

相关问题 更多 >