int num=1;
if(num==1){
while(num<10){
num++;
if(num==5){
break;
}
}
System.out.println(num);
}
Выходное значение равно 5
Это связано с тем, что оператор разрывается, оператор выходит из внутреннего цикла, который он может найти
Вероятно, не лучшее решение для этой проблемы:
indices = 0, 2
somelist = [i for j, i in enumerate(somelist) if j not in indices]
Можно сделать тот путь на dict, не в списке. В списке элементы находятся в последовательности. В dict они зависят только от индекса.
Простой код только для объяснения этого путем выполнения :
>>> lst = ['a','b','c']
>>> dct = {0: 'a', 1: 'b', 2:'c'}
>>> lst[0]
'a'
>>> dct[0]
'a'
>>> del lst[0]
>>> del dct[0]
>>> lst[0]
'b'
>>> dct[0]
Traceback (most recent call last):
File "<pyshell#19>", line 1, in <module>
dct[0]
KeyError: 0
>>> dct[1]
'b'
>>> lst[1]
'c'
А способ "преобразовать" список в dict:
>>> dct = {}
>>> for i in xrange(0,len(lst)): dct[i] = lst[i]
инверсия:
lst = [dct[i] for i in sorted(dct.keys())]
Так или иначе я думаю, что лучше начать удалять из более высокого индекса, как Вы сказали.
Я могу на самом деле думать о двух способах сделать это:
нарезают список как (это удаляет 1-е, 3-и и 8-е элементы)
somelist = somelist [1:2] +somelist [3:7] +somelist [8:]
делают это на месте, но по одному:
somelist.pop (2) somelist.pop (0)
Как функция:
def multi_delete(list_, *args):
indexes = sorted(list(args), reverse=True)
for index in indexes:
del list_[index]
return list_
Выполнения в журнал n (n) время, которое должно сделать это самым быстрым правильным решением все же.
Если Вы удаляете несколько несмежных объектов, то то, что Вы описываете, является лучшим способом (и да, несомненно, начнут с самого высокого индекса).
, Если Ваши объекты смежны, можно использовать синтаксис присвоения части:
a[2:10] = []
Так, Вы по существу хотите удалить несколько элементов в одной передаче? В этом случае положение следующего элемента, который удалит, будет смещено однако, многие были удалены ранее.
Наша цель состоит в том, чтобы удалить все гласные, которые предварительно вычисляются, чтобы быть индексами 1, 4, и 7. Обратите внимание, что его важное, to_delete индексы в порядке возрастания, иначе это не будет работать.
to_delete = [1, 4, 7]
target = list("hello world")
for offset, index in enumerate(to_delete):
index -= offset
del target[index]
Это было бы более сложное, если бы Вы хотели удалить элементы в порядке. IMO, сортируя to_delete
мог бы быть легче, чем выяснение, когда Вы должны или не должны вычитать от index
.
Как специализация ответа Greg, можно даже использовать расширенный синтаксис части. например, Если Вы хотели удалить объекты 0 и 2:
>>> a= [0, 1, 2, 3, 4]
>>> del a[0:3:2]
>>> a
[1, 3, 4]
Это не покрывает произвольного выбора, конечно, но он может, конечно, работать на удаление любых двух объектов.
Ни один из ответов, предлагаемых до сих пор, не выполняет удаление на месте в O (n) на длине списка для произвольного числа индексов для удаления, таким образом, вот моя версия:
def multi_delete(the_list, indices):
assert type(indices) in {set, frozenset}, "indices must be a set or frozenset"
offset = 0
for i in range(len(the_list)):
if i in indices:
offset += 1
elif offset:
the_list[i - offset] = the_list[i]
if offset:
del the_list[-offset:]
# Example:
a = [0, 1, 2, 3, 4, 5, 6, 7]
multi_delete(a, {1, 2, 4, 6, 7})
print(a) # prints [0, 3, 5]
Можно использовать, удаляют, также.
delete_from_somelist = []
for i in [int(0), int(2)]:
delete_from_somelist.append(somelist[i])
for j in delete_from_somelist:
newlist = somelist.remove(j)