Чтобы проверить, содержится ли в списке my_list
массив, равный a
, используйте
any((a == x).all() for x in my_list)
break
выйдет из цикла полностью, continue
будет всего пропуск текущее повторение.
, Например:
for (int i = 0; i < 10; i++) {
if (i == 0) {
break;
}
DoSomeThingWith(i);
}
повреждение заставит цикл выходить на первом повторении - DoSomeThingWith
, никогда не будет выполняться. Это здесь:
for (int i = 0; i < 10; i++) {
if(i == 0) {
continue;
}
DoSomeThingWith(i);
}
не выполнится DoSomeThingWith
для i = 0
, но цикл будет продолжаться , и DoSomeThingWith
будет выполняться для i = 1
к i = 9
.
Простой ответ:
Повреждение выходы цикл сразу.
Продолжаются , начинает обрабатывать следующий объект. (Если существует кто-либо путем перехода к строке оценки для/в то время как)
Ruby, к сожалению, несколько отличается. PS: Моя память является немного туманной на этом так извинения, если я неправ
вместо, повреждают/продолжают, она имеет повреждение / следующий, которые ведут себя то же с точки зрения циклов
, Циклы (как все остальное) являются выражениями и "возвращают" последнюю вещь, которую они сделали. Большую часть времени получение возвращаемого значения от цикла бессмысленно, таким образом, все просто делают это
a = 5
while a < 10
a + 1
end
, можно однако сделать это
a = 5
b = while a < 10
a + 1
end # b is now 10
ОДНАКО, много кода Ruby 'эмулирует' цикл при помощи блока. Канонический пример
10.times do |x|
puts x
end
, Поскольку людям намного более свойственно хотеть сделать вещи с результатом блока, это - то, где это становится грязным. повреждение средние разные вещи / следующие средние разные вещи в контексте блока.
повреждение выпрыгнет из кода, который названный блоком
следующий пропустит остальную часть кода в блоке и 'возвратит' то, что Вы определяете вызывающей стороне блока. Это не имеет никакого смысла без примеров.
def timesten
10.times{ |t| puts yield t }
end
timesten do |x|
x * 2
end
# will print
2
4
6
8 ... and so on
timesten do |x|
break
x * 2
end
# won't print anything. The break jumps out of the timesten function entirely, and the call to `puts` inside it gets skipped
timesten do |x|
break 5
x * 2
end
# This is the same as above. it's "returning" 5, but nobody is catching it. If you did a = timesten... then a would get assigned to 5
timesten do |x|
next 5
x * 2
end
# this would print
5
5
5 ... and so on, because 'next 5' skips the 'x * 2' and 'returns' 5.
Так да. Ruby является потрясающим, но он имеет некоторые ужасные угловые случаи. Это - второе с конца, я видел в своих годах использования его:-)
Существуют больше, чем несколько человек, которым не нравится break
и continue
. Последняя жалоба я занялся ими, была в [1 112] JavaScript: Хорошие Части Douglas Crockford. Но я нахожу, что иногда использование одного из них действительно упрощает вещи, особенно если Ваш язык не включает do-while
или do-until
стиль цикла.
я склонен использовать break
в циклах, которые ищут список что-то. После того, как найденный, в продолжении нет никакого смысла, таким образом, Вы могли бы также выйти.
я использую continue
при выполнении чего-то с большинством элементов списка, но все еще хочу перескочить через некоторых.
break
оператор также пригождается при опросе относительно допустимого ответа от кого-то или чего-то. Вместо:
Ask a question
While the answer is invalid:
Ask the question
Вы могли устранить некоторое дублирование и использование:
While True:
Ask a question
If the answer is valid:
break
do-until
цикл, который я упомянул прежде, является более изящным решением для той конкретной проблемы:
Do:
Ask a question
Until the answer is valid
Никакое дублирование и никакой break
необходимый также.
break
остановился бы foreach
, цикл полностью, continue
пропустит к следующему DataRow
.
повреждение причины счетчик команд для выпрыгивания из объема самого внутреннего цикла
for(i = 0; i < 10; i++)
{
if(i == 2)
break;
}
Работы как это
for(i = 0; i < 10; i++)
{
if(i == 2)
goto BREAK;
}
BREAK:;
продолжаются переходы до конца цикла. В для цикла, продолжите переходы к инкрементному выражению.
for(i = 0; i < 10; i++)
{
if(i == 2)
continue;
printf("%d", i);
}
Работы как это
for(i = 0; i < 10; i++)
{
if(i == 2)
goto CONTINUE;
printf("%d", i);
CONTINUE:;
}
Действительно простой способ понять это состоит в том, чтобы поместить слово "цикл" после каждого из ключевых слов. Условия теперь имеют смысл, если они просто читаются как повседневные фразы.
break
цикл - цикличное выполнение повреждается и останавливается.
continue
цикл - цикл продолжает выполняться со следующим повторением.
Позвольте мне заявить очевидное: обратите внимание, что добавление ни повреждение, ни продолжается, возобновит Вашу программу; т.е. Я захватил для определенной ошибки, затем после входа его, я хотел продолжить обрабатывать, и было больше задач кода, промежуточных следующая строка, таким образом, я просто позволяю ему провалиться.