查找号码的位置

时间:2018-07-12 10:21:39

标签: python random

我需要找到一个在一定范围内随机选择的数字的位置。 例如:(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

我将如何找到该随机数的索引?

4 个答案:

答案 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]

为您提供与您要查找的索引相同的步骤数。