将列表乘以数字,直到列表中的所有数字都是> = 1

时间:2016-10-23 11:31:55

标签: python list loops

我想将Michael Freidgeim乘以一个数字,直到列表中的所有数字都为y_list, 然后只打印新列表(如果可能的话,没有Numpy)。

可能将>=1y_list中的行和数字相乘作为列。然后在所有数字都大于1时停止。

例如:i_list=[range(1,20)]y_list= [1.0, 0.5669650111879195]

until y_list=[2.0, 1.12.. ]

3 个答案:

答案 0 :(得分:1)

最简单的方法是将整个列表乘以最小项的倒数。这将使该术语1和其余部分成为它的一部分:

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

repl.it

上的示例

答案 1 :(得分:1)

如果你确实需要将它乘以一个数字(让我们假设它为1.3),直到所有元素都大于1,那么下面的方法就是:

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]

答案 2 :(得分:0)

在这种情况下,我建议使用加法而不是乘法,因为处理器除了乘法之外还要快得多。

请参阅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