#python #arrays #list #ran&e #increment
#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 ]
Комментарии:
1. Итак, ваш вопрос заключается в том, как создать диапазон, который варьируется, например, от 0,9 до 0,6, выполнив 12 шагов, определенных целым числом?
2. да. это именно так.
3. Я не вижу много задействованных идиоматик Python. Это скучный низкоуровневый материал с обычным округлением из-за проблем с плавающей запятой.
4. Например, просто используйте numpy.linspace(0.9,0.6, 13)
5. Не-numpy:
incrementalValues = [(x[0]-x[1])/divider for x in zip(startValues,endValues)]
Ответ №1:
Да, вы можете использовать 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]
Ответ №2:
Простой функцией могла бы быть эта (возможно, название немного неудачное):
def listRan&e(startValues, endValues, divider):
steps = [(e-s)/divider for s,e in zip(startValues, endValues)]
for t in ran&e(1,divider 1):
yield [v s*t for v,s in zip(startValues,steps)]
использование аналогично ran&e
функции:
divider = 12
startValues= [0.9, 0.3, 0.8, 0.9]
endValues = [0.6, 1.0, 1.0, 0.4]
for v in listRan&e(startValues, endValues, divider):
print(v)
Комментарии:
1. Думаю, я объясню вам эту функцию. это может работать на любой машине.
Ответ №3:
я использую np.aran&e
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.aran&e(start , stop ,step))
pd.DataFrame(lst).T
pd.concat([pd.DataFrame(lst).T , pd.DataFrame([endValues])])