在python中,如何在两个浮点列表之间建立一个范围?

2024-09-30 14:37:19 发布

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

有两个列表

相同数量的元素(浮动)

具有步数的int变量

是否有一个命令或命令可以使第一个值到第二个值的范围

divider = 12
startValues= [0.9,     0.3,     0.8,     0.9]
endValues  = [0.6,     1.0,     1.0,     0.4]

#the result should look like this:
#incrementalValues = [0.025, 0.05833, 0.0166, 0.04166]

#startValues =     [0.9,   0.3,     0.8,    0.9     ]
#intermediaryVal = [0.875, 0.35833, 0.8166, 0.85834 ]
#intermediaryVal = [0.85,  0.4166,  0.8333, 0.81668 ]
#intermediaryVal = [0.825, 0.4749,  0.8500, 0.77502 ]
#intermediaryVal = [0.8,   0.5333,  0.8666, 0.73336 ]
#intermediaryVal = [0.775, 0.5916,  0.8833, 0.6917  ]
#intermediaryVal = [0.75,  0.6499,  0.9000, 0.65004 ]
#intermediaryVal = [0.725, 0.7083,  0.9166, 0.60838 ]
#intermediaryVal = [0.7,   0.7666,  0.9333, 0.56672 ]
#intermediaryVal = [0.675, 0.8249,  0.9500, 0.52506 ]
#intermediaryVal = [0.65,  0.8833,  0.9666, 0.4834  ]
#intermediaryVal = [0.625, 0.9416,  0.9833, 0.44174 ]
#endValues =       [0.6,   1.0,     1.0,    0.4     ]

Tags: the命令元素列表数量resultlikeint
3条回答

我使用np.arange

divider = 12
startValues= [0.9,     0.3,     0.8,     0.9]
endValues  = [0.6,     1.0,     1.0,     0.4]

lst = []
for start , stop in zip(startValues , endValues):
    if start<stop:
        step =(stop-start) / divider
    else:
        step = -(start - stop) / divider
    lst.append(np.arange(start , stop ,step))

pd.DataFrame(lst).T
pd.concat([pd.DataFrame(lst).T , pd.DataFrame([endValues])])

enter image description here

是的,你可以用numpy

import numpy as np 
  
spaces = list(np.linspace(0.5, 1.5, 8))
print(spaces)

# output :
# [0.5, 0.64285714285714279, 0.7857142857142857, 0.9285714285714286, 1.0714285714285714, 1.2142857142857142, 1.3571428571428572, 1.5]

一个简单的函数可以是这个(可能名称有点不吉利):

def listRange(startValues, endValues, divider):
    steps = [(e-s)/divider for s,e in zip(startValues, endValues)]
    for t in range(1,divider+1):
        yield [v+s*t for v,s in zip(startValues,steps)]

用法类似于range函数:

divider = 12
startValues= [0.9,     0.3,     0.8,     0.9]
endValues  = [0.6,     1.0,     1.0,     0.4]

for v in listRange(startValues, endValues, divider):
    print(v)

相关问题 更多 >