如何在循环时中断

时间:2019-06-04 06:21:11

标签: python while-loop

我正在尝试查找列表中的元素是否在已知列表大小且还知道范围数的范围内

我已经尝试过使用while循环在python中进行逻辑处理

a[1]=[23,330,460]
r=[1,120,300,450,600]

我的范围列表是

  • i = 0时为1到100
  • i = 1时为120至220
  • i = 2时为300到400
  • i = 3时从450到550
  • 600 t0 700 for i = 4

a[1]具有一些与范围内的元素进行比较的值

检查后得到

a[0]

如果a[1]不在定义的范围内 a[0]必须为0, 否则1

j=0 
for i in range(0,5):
    while j<3:
        l=list(range(r[i],r[i]+100))
        if a[1][j] in l:
            a[0].append(1)
            j=j+1
        else:
            a[0].append(0)
            j=j

我希望输出为a[0]=[1 0 1 1 0]

3 个答案:

答案 0 :(得分:0)

您的代码不会更改'j'值,因为在这种情况下,它首先执行,所以它变为无限。

a=[[],[23,330,460]]
r=[1,120,300,450,600] 
for i in range(5):
    j=0 
    l=list(range(r[i],r[i]+100))
    while j<3:            
        if a[1][j] in l:
            a[0].append(1)
            break
        j=j+1
    else:
        a[0].append(0)

print(a[0])
#[1, 0, 1, 1, 0]

用于

a=[[],[23,330,460]]
r=[1,120,300,450,600] 
for i in range(5):
    l=list(range(r[i],r[i]+100))
    for j in a[1]:
        if j in l:
            a[0].append(1)
            break
    else:
        a[0].append(0)

print(a[0])
#[1, 0, 1, 1, 0]

使用任何

根据tripleee答案进行了更新,范围没有必要

a=[[],[23,330,460]]
r=[1,120,300,450,600] 
for i in range(5):
    a[0].append(int(any(r[i]<=j<=r[i]+100 for j in a[1])))
print(a[0])
#[1, 0, 1, 1, 0]

答案 1 :(得分:0)

在循环的每次迭代中创建100个元素的列表是非常低效的,而且非常简单。我想你只是想

result = []
for pos, val in enumerate(a[1]):
    if r[pos] <= val <= r[pos]+100:
        comp = 1
    else:
        comp = 0
    result.append(comp)

或更简洁地理解列表

result = [1 if r[pos] <= val <= r[pos]+100 else 0
    for pos, val in enumerate(a[1])]

如果您希望该值位于a[0]中,则只需在末尾分配a[0] = result即可;但实际上,这种设计非常可疑。我建议您保留两个单独的变量,或者如果需要将它们保持在一起,则可以将输入和输出重构为一个类。

答案 2 :(得分:0)

如果使用其他条件,该怎么办:如果结果符合您的期望,请继续。如果没有,请休息。

result = []
for pos, val in enumerate(a[1]):
    if r[pos] <= val <= r[pos]+100:
        comp = 1
    else:
        if comp == 1 then 
        echo 'Well done'
         else break 0;


    result.append(comp)

不太确定...