我需要找到一个在一定范围内随机选择的数字的位置。
例如:(start, stop, step): (3,6,1)
这对应于(3,4,5,6)
从这个数字中随机选择一个,我想找到一种在枚举后不使用列表的情况下获得数字位置的方法。
代码如下:
tuple_val = (3,6,1) #or any value
rand_val = randint(tuple_val[0], tuple_val[1])
for val in range(tuple_val[0], tuple_val[1], tuple_val[2]):
if rand_val == val:
#FIND INDEX OF rand_val
我将如何找到该随机数的索引?
答案 0 :(得分:2)
您可能要使用enumerate
:
tuple_val = (3,6,1) #or any value
rand_val = randint(tuple_val[0], tuple_val[1])
for idx, val in enumerate(range(tuple_val[0], tuple_val[1], tuple_val[2])):
if rand_val == val:
#idx is your index
答案 1 :(得分:1)
由于您运行在range
上,因此可以更简单地找到索引-根本不需要遍历循环。
index = (rand_val - tuple_val[0]) / tuple_val[2]
index = (rand_val - start) / * step
例如,如果要在示例中为数字4编制索引,它就是:
(4-3) / 1 = 1
根据您的评论,该数字必须存在。
答案 2 :(得分:1)
无需迭代,因为可以用数学方式描述范围(Python 3):
def find_in_range(value, r):
if value not in r:
return False
return (value - r.start) // r.step
tuple_val = (3, 6, 1)
print(find_in_range(5, range(*tuple_val)))
# => 2
答案 3 :(得分:1)
考虑您的
vec4( vec3(), vec3() )
然后
tuple_val = (3,6,1) #or any value
rand_val = randint(tuple_val[0], tuple_val[1])
表示到间隔起点的差,
rand_val - tuple_val[0]
为您提供与您要查找的索引相同的步骤数。