Удалить элемент из списка в Python, итерируя по нему [duplicate]
На этот вопрос уже есть ответ здесь:
Как удалить элементы из списка во время итерации? 23 ответаЯ пишу алгоритм циклического перебора для турнирного приложения.
Когда количество игроков нечетное, я добавляю'DELETE'
в список игроков, но позже, когда я хочу удалить все элементы из списка расписания, которые содержат'DELETE'
Я не могу - один всегда остается. Пожалуйста, посмотрите на код - проблема проста, и я полагаю, что это о списках; Я просто не вижу этого.
"""
Round-robin tournament:
1, 2, 3, 4, | 5, 6, 7, 8 => 1, 2, 3, 4 => rotate all but 1 => 1, 5, 2, 3 => repeat => 1, 6, 5, 2 ...
5, 6, 7, 8 6, 7, 8, 4 7, 8, 4, 3
in every round pick l1[0] and l2[0] as first couple, after that l1[1] and l2[1]...
"""
import math
lst = []
schedule = []
delLater = False
for i in range(3): #make list of numbers
lst.append(i+1)
if len(lst) % 2 != 0: #if num of items is odd, add 'DELETE'
lst.append('DELETE')
delLater = True
while len(schedule) < math.factorial(len(lst))/(2*math.factorial(len(lst) - 2)): #!(n)/!(n-k)
mid = len(lst)/2
l1 = lst[:mid]
l2 = lst[mid:]
for i in range(len(l1)):
schedule.append((l1[i], l2[i])) #add lst items in schedule
l1.insert(1, l2[0]) #rotate lst
l2.append(l1[-1])
lst = l1[:-1] + l2[1:]
if delLater == True: #PROBLEM!!! One DELETE always left in list
for x in schedule:
if 'DELETE' in x:
schedule.remove(x)
i = 1
for x in schedule:
print i, x
i+=1