我有一个预定义的列表,该列表以(最小,最大,增量)形式提供数据。例如:
[[0.0 1.0 0.1 #mass
1.0 5.0 1.0 #velocity
45.0 47.0 1.0 #angle in degrees
0.05 0.07 0.1 #drag coeff.
0.0 0.0 0.0 #x-position
0.0 0.0 0.0]] #y-postion
并继续进行其他一些变量。理想情况下,我想将每个变量都当作一个单独的变量声明,并为给定范围内的每个值创建一个有限列表。
例如,质量为:
m = [0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]
这样,我可以利用itertools.combinations((m, x, b,...), r)
给定每个变量的各种可能性来创建所有可能的组合。
有什么建议?
不确定列表结构,如果确实需要切片,则可以使用itertools.islice并将所有列表存储在dict中:
from itertools import islice
l = iter([0.0, 1.0, 0.1, #mass
1.0, 5.0, 1.0,#velocity
45.0 ,47.0, 1.0, #angle in degrees
0.05, 0.07, 0.1, #drag coeff.
0.0, 0.0 ,0.0 ,#x-position
0.0 ,0.0, 0.0])#y-postion
d = {}
import numpy as np
for v in ("m","v","and","drg","x-p","y-p"): # put all "variable" names in order
start, stop , step = islice(l, None, 3)
# or use next()
# start, stop , step = next(l), next(l), next(l)
if stop > start: # make sure we have a step to take
# create key/value pairing
d[v] = np.arange(start, stop + 1,step)
else:
# add empty list for zero values
d[v] = []
print(d)
{'x-p': [], 'drg': array([ 0.05, 0.15, 0.25, 0.35, 0.45, 0.55, 0.65, 0.75, 0.85,
0.95, 1.05]), 'and': array([ 45., 46., 47.]), 'v': array([ 1., 2., 3., 4., 5.]), 'y-p': [], 'm': array([ 0. , 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1. ,
1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9])}
您还可以创建自己的范围,以浮动为单位:
def float_range(start=0, stop=None, step=1):
while start <= stop:
yield start
start += step
然后使用进行调用list(start, stop,step)
,但是在处理浮点数时需要小心,因为浮点算术:问题和局限性
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句