Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中查找值范围在0-100之间的索引_Python_List_Syntax_Range - Fatal编程技术网

在Python中查找值范围在0-100之间的索引

在Python中查找值范围在0-100之间的索引,python,list,syntax,range,Python,List,Syntax,Range,这是一个由两部分组成的问题,我必须通过列表中任意数量的整数的随机范围选择两个索引。如果两者都在同一范围内,则不能同时返回 Selection1 = random.randint(0,100) Selection2 = random.randint(0,100) 为了这个论点,说: Selection1 = 10 Selection2 = 17 And the list would be like so [25, 50, 75, 100] 两者都将返回索引0,因为它们位于0-25之间 所以两者

这是一个由两部分组成的问题,我必须通过列表中任意数量的整数的随机范围选择两个索引。如果两者都在同一范围内,则不能同时返回

Selection1 = random.randint(0,100)
Selection2 = random.randint(0,100)
为了这个论点,说:

Selection1 = 10
Selection2 = 17
And the list would be like so [25, 50, 75, 100]
两者都将返回索引0,因为它们位于0-25之间

所以两者都属于第一个索引范围,问题是我在尝试将其放入这个范围(即:0-25)时遇到了一些问题,它将返回第一个索引(返回列表[0])

python中这种逻辑的语法是什么

我确信如果不同的索引落在同一个范围内,我可以找出如何返回它们,可能只是循环重置为循环,但如果我能得到一些建议,这不会有什么坏处

我将给出我正在使用的代码作为指导。最底层是我挣扎的地方

代码在这里

def roulette_selection(decimal_list, chromosome_fitness, population):
    percentages = []
    for i in range(population):
        result = decimal_list[i]/chromosome_fitness
        result = result * 100
        percentages.append(result)

    print(percentages)
    range_in_fitness = []
    current_percent = 0

    for i in range(population):
        current_percent = percentages[i] + current_percent
        range_in_fitness.append(current_percent)
    parent1 = random.randint(0, 100)
    parent2 = random.randint(0, 100)

    for i in range(population):
        if parent1 >= range_in_fitness[i] and parent1<=range_in_fitness[i+1]:


    print(parent1, parent2)
    print(range_in_fitness)
def轮盘赌选择(十进制列表、染色体适合度、总体):
百分比=[]
对于范围内的i(总体):
结果=十进制列表[i]/染色体匹配度
结果=结果*100
百分比。追加(结果)
打印(百分比)
适用范围=[]
当前百分比=0
对于范围内的i(总体):
当前百分比=百分比[i]+当前百分比
范围\u在\u fitness.append中(当前\u百分比)
parent1=random.randint(01100)
parent2=random.randint(01100)
对于范围内的i(总体):

如果parent1>=range\u in\u fitness[i]并且parent1如果对范围列表进行了排序,或者可以对其进行排序,并且是连续的(没有间隙),则可以使用Python模块以有效的方式进行排序。例如:

>>> l = [25, 50, 75, 100]
>>> import bisect
>>> bisect.bisect(l, 10)
0
>>> bisect.bisect(l, 17)
0
>>> bisect.bisect(l, 55)
2
>>> bisect.bisect(l, 25)
1
二分法返回输入编号应落在列表中的位置的索引,以保持排序顺序。请注意,这是一个有点混乱的想法在第一次;在上述
55
的情况下,它返回
2
,因为它应该插入索引2,因为它位于索引
1
2
的当前值之间。如果您在范围边界上精确地给它一个数字,它将“落在右边”,如
对分(l,25)
示例所示


链接文档包括一组使用对分搜索排序列表的方法,只要输入
val
和范围分隔符列表
delims
,以下是两种方法:

# Both methods require range_delims to be sorted
range_delims = [25,50,75,100]

# Simple way
def find_range1(val, delims):
    for i,d in enumerate(delims):
        if val < d: return i

print find_range1(10,  range_delims)  # 0
print find_range1(17,  range_delims)  # 0
print find_range1(32,  range_delims)  # 1
print find_range1(64,  range_delims)  # 2
print find_range1(96,  range_delims)  # 3
print find_range1(101, range_delims)  # None


# More explicit, possibly unnecessarily so
import math

def find_range2(val, delims):
    lbl = [float('-inf')] + delims
    ubl = delims + [float('inf')]
    for (i,(lb,ub)) in enumerate(zip(lbl, ubl)):
        if lb <= val < ub: return i

print find_range2(10,  range_delims)  # 0
print find_range2(17,  range_delims)  # 0
print find_range2(32,  range_delims)  # 1
print find_range2(64,  range_delims)  # 2
print find_range2(96,  range_delims)  # 3
print find_range2(101, range_delims)  # 4
#这两种方法都要求对范围数据进行排序
范围_delims=[25,50,75100]
#简单方法
def查找范围1(val,delims):
对于我,我在列举(delims):
如果val如果你能修复代码的缩进?函数def与其他所有函数都是内联的,最后两个print语句应该在if?@MasterOdin下很抱歉,现在应该修复了,不,适应范围已经修复,父级也已经修复了,不需要将它们放在if语句中,但代码应该在那里,我只是不知道从if的声明中该去哪里,它甚至都不起作用,我只是想给人们指出正确的方向,以及我试图去哪里。两者都是非常低效的。阿鲁伊斯坦特的回答要快得多(并且涉及上限)