Как прервать цикл - PullRequest
       7

Как прервать цикл

0 голосов
/ 04 июня 2019

Я пытаюсь найти, существует ли элемент в списке в диапазоне, где известен размер списка и число диапазонов также известно

Я пробовал логику в python, используя while loop

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

и мой список диапазонов

  • 1 до 100 для i = 0
  • от 120 до 220 для i = 1
  • 300–400 для i = 2
  • 450 до 550 для i = 3
  • 600 t0 700 для 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 голосов
/ 04 июня 2019

Создание списка из 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 в конце;но на самом деле этот дизайн крайне сомнителен.Я бы посоветовал вам оставить две отдельные переменные или, возможно, реорганизовать ввод и вывод в класс, если вам нужно их объединить.

0 голосов
/ 04 июня 2019

Как насчет того, чтобы использовать другое, если: если результат соответствует вашим ожиданиям, продолжайте. Если нет, перерыв.

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)

Не совсем уверен, кстати ...

0 голосов
/ 04 июня 2019

Ваш код не изменяет значение j в else, так как в этом случае он выполняется первым, поэтому он становится бесконечным.

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]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...