#python #for-loop #if-statement #break
Вопрос:
У меня проблемы с циклами. У меня есть простой цикл for, который добавляет случайные числа , мне нужно, чтобы, если число появляется несколько раз подряд for loop
, это был пример.
import numpy as np
stop = 3
value = []
for i in range(100):
value.append(np.random.randint(0, 2))
print(value)
if value[-stop:] == [0]*stop or value[-stop:] == [1]*stop:
break
Что делает этот код, я хочу сделать for loop 100 times
, но если число 0 или число 1 появляются 3 раза подряд в конце списка, а затем прерывается цикл, как я могу обобщить на любое случайное число без необходимости добавлять бесконечность or
для каждого случайного значения. Я попытался использовать другой цикл for для повторения каждого значения в добавленном списке, но это не работает, он продолжает добавлять случайные числа, даже если условие достигнуто:
stop = 3
value = []
for i in range(15):
value.append(np.random.randint(0, 3))
print(value)
for i in value:
if value[-stop:] == [i]*stop:
break
This is what I get in the 10th iteration, here it should stop, since 0 appears three times:
[0, 1, 0, 1, 1, 2, 0, 2, 0, 0, 0]
But it keeps doings iterations and the next one is
[0, 1, 0, 1, 1, 2, 0, 2, 0, 0, 0, 2]
Любая идея была бы признательна, если что-то не ясно, пожалуйста, дайте мне знать, и я отредактирую вопрос. Еще раз спасибо вам!
Комментарии:
1.
[i]*stop
не будет работать, например, в цикле, когдаi=10
, тогда[i]*stop
даст[10,10,10]
заstop=3
Ответ №1:
Проверьте, все ли значения соответствуют первому из группы:
if all(value[pos] == value[-1] for pos in range(-stop, -2)):
Вы проверяете последний элемент, value[-1]
, по сравнению с предыдущими от позиции -stop
до -2
.
Посмотрите функции any
и all
; они очень полезны для таких вещей.
Комментарии:
1. Или можно использовать np.where вместе со всеми для последних нескольких значений, упомянутых как stop. Верно?
Ответ №2:
Итак, я понял ваш вопрос и пришел к такому ответу. Дай мне знать, если у тебя все получится.
import numpy as np
stop = 3
value = []
for i in range(15):
value.append(np.random.randint(0, 3))
print(value)
if len(value)<stop:
continue
if all(np.where(np.array(value[-stop:])==value[-1], True, False)):
break
Для одного из случайных запусков я получил это в качестве вывода:
[1]
[1, 2]
[1, 2, 0]
[1, 2, 0, 1]
[1, 2, 0, 1, 1]
[1, 2, 0, 1, 1, 1]
Дайте мне знать, если это сработает для вас или если вы захотите внести какие-либо другие изменения.