Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 4, 2014 16:12:30

Gustman
Зарегистрирован: 2014-11-30
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Изминение в списке

Помогите понять, почему в этом коде после 2 цыкла (for xb in lst) если выводить lst будет 2, 4, 6, а если добавить удаление с списка будет 2, 6 ?

def modify_list(l):
    for xa in lst:
        if ((xa % 2) != 0):
            lst.remove(xa)
    for xb in lst:
        print (xb)
        lst.remove(xb)
lst = [1, 2, 3, 4, 5, 6]

Офлайн

#2 Дек. 4, 2014 17:09:24

dimy44
От: Евпатория
Зарегистрирован: 2012-04-21
Сообщения: 463
Репутация: +  42  -
Профиль  

Изминение в списке

Так делать крайне нежелательно. Перед первым циклом

lst = [1, 2, 3, 4, 5, 6]
for берет первый по счету элемент, затем второй, итд, пока не пройдет все. Первый это 1, удовлетворяет условию xa % 2 != 0. Поэтому вы его удаляете. Какой теперь список? Правильно,
[2, 3, 4, 5, 6]
Следующий элемент для xa это второй по счету. Гляньте на список, и вы увидете- двойка пропущена. Дальше сами додумайте, суть я объяснил.

Офлайн

#3 Дек. 4, 2014 18:10:58

Gustman
Зарегистрирован: 2014-11-30
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Изминение в списке

После первого цыкла останется lst = 2,4,6
А второй цыкл сьедает 4.
У меня вопрос сейчас состоит в

for xb in lst:
        print (xb)
        lst.remove(xb)
ЗЫ Я пишу функцию которой на вход идет список.
lst = [1, 2, 3, 4, 5, 6]
print(modify_list(lst))

Отредактировано Gustman (Дек. 4, 2014 18:12:18)

Офлайн

#4 Дек. 4, 2014 18:28:06

dimy44
От: Евпатория
Зарегистрирован: 2012-04-21
Сообщения: 463
Репутация: +  42  -
Профиль  

Изминение в списке

В чемв вопрос, уточните

def modify_list(l):
    #print(l)
    for xa in lst:
        if ((xa % 2) != 0):
            lst.remove(xa)
    #print(l)
    for xb in lst:
        lst.remove(xb)
    #print(l)
    return l
lst = [1, 2, 3, 4, 5, 6]
print(modify_list(lst))
>>> [4]
так и должно быть

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version