Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Удаление одного элемента из списка в Python 
:(
    Опции темы
korob2001
Дата 28.2.2004, 01:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: нет
Всего: 61



Всем, привет!
Вообще-то я программирую на Perl, но с недавних пор начал изучать Python. Приобрёл книгу
'Освой самостоятельно Python за 24 часа'
Автор: Иван ван Лейнингем

Дошёл до списков, немного поэксперементировал и вот что заметил:
Допустим у нас есть список содержащий в себе цифры и буквы. Пытаюсь сделать так, что бы в списке остались только буквы, как показано ниже.

Код

#!C:\Python23\python.exe
spisok = ['a', 'x', 2, 'y', 5, 8, 11, 'b', 'f', 'j']
for element in spisok :
       if type( element ) == type( 0 ) :
              spisok.remove( element )
              print 'Элемент "', element, '" удалён'
       else :
              print 'Элемент "', element, '" оставлен'

После получаю такой результат:


Элемент " a " оставлен
Элемент " x " оставлен
Элемент " 2 " удалён
Элемент " 5 " удалён
Элемент " 11 " удалён
Элемент " f " оставлен
Элемент " j " оставлен


Как видите, всё вроде нормально, но элемент 8 остался. После пишу туже программу в IDLE, но результат остался тот же. Затем пробую в IDLE вывести на стандартное устройство вывода весь список, получаю такой результат: ['a', 'x', 'y', 8, 'b', 'f', 'j']. Можно заметить и здесь восьмёрку. sad.gif ОК. Пытаюсь в IDLE повторить выше указанный код и что вы думаете? В ответ получаю следующий результат:


Элемент " a " оставлен
Элемент " x " оставлен
Элемент " y " оставлен
Элемент " 8 " удалён
Элемент " f " оставлен
Элемент " j " оставлен


В IDLE, вывожу на экран весь список print spisok в результате получаю:
['a', 'x', 'y', 'b', 'f', 'j']
Как видно из примера, мы избавились от восьмёрки только после второго цикла for.

Вопросы:
1. Почему после первого цикла цира 8 не была удалена из списка?
2. Почему после второго цикла цифра 8 была удалена из списка?

Заранее благодарен,
Денис

Это сообщение отредактировал(а) korob2001 - 28.2.2004, 01:35


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
Kurt
Дата 10.11.2004, 23:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлеченный
***


Профиль
Группа: Участник Клуба
Сообщений: 1662
Регистрация: 22.8.2003
Где: Краснодар

Репутация: нет
Всего: 36



Хе, а я, вроде, понял. smile
Давайте еще раз глянем на результат работы программы, а именно:
Цитата
Элемент " a " оставлен
Элемент " x " оставлен
Элемент " 2 " удалён
Элемент " 5 " удалён
Элемент " 11 " удалён
Элемент " f " оставлен
Элемент " j " оставлен

Да, тут ничего не сказано про 8. Его нет ни в сообщении об удаленни, так и в сообщении о том, что этот элемент оставлен.
Смотрим дальше.. А где же 'b'?! Или 'y'? Про него тоже ни слова..
Получается, что пропускается елемент, следующий за удаленным.
Но так и должно быть!
Как я догадываюсь, в конструкции for.. in .. также существует счетчик, к-й увеличивается при каждом проходе цикла.
Если делать по шагам:
1) дошли до числа 2. Счетчик соответственно равен 3 (я буду считать от 1 - так проще в данной ситуации);
2) удаляем этот элемент;
3) увеличиваем счетчик (т.е. теперь он равен 4);
4) смотрим элемент с номером 4 В ОБНОВЛЕННОМ СПИСКЕ (к-й получился после удаления). Это число 5!
Получается, что мы пропустили 'y'.
Так же и в остальных случаях.

З.Ы. Сорри, что поднимаю старую тему, но как-то интересно стало, да и ответов не было..


--------------------
Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед)
...
Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн)
PM ICQ   Вверх
setq
Дата 11.11.2004, 18:50 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











да уж, надеюсь korob2001 уже отыскал решение и не забросил python.

я слышал, что не рекомендуется изменять тот список по которому делается цикл.

если бы передо мной поставили ту же задачу, я лично бы отдал предпочтение функциям работы со списками. тому же filter
  Вверх
simanyay
Дата 11.11.2004, 19:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Антон Ковалёв
****


Профиль
Группа: Участник
Сообщений: 2053
Регистрация: 22.8.2002

Репутация: нет
Всего: 36



Цитата(setq @ 11.11.2004, 20:50)
я слышал, что не рекомендуется изменять тот список по которому делается цикл.


Это точно. Читал где-то в мануалах, но понял на собственном опыте smile


--------------------
«It's better to be a pirate than to join the Navy» — Steve Jobs.
PM MAIL WWW   Вверх
korob2001
Дата 12.11.2004, 01:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: нет
Всего: 61



Нашёл, уже давно. ;)
Но, все-равно, спасибо. Сам Python язык прикольный, но меня вот что не прикололо: его поддержка. Найти толковый форум по Python удалось только спустя пол года, после того как начал его изучать. Но и там только 1-2 человека активных. А так ответы, в лучшем случае, получал через 2 - 3 недели, в худшем, вообще не получал. ;)


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
Kurt
Дата 12.11.2004, 02:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлеченный
***


Профиль
Группа: Участник Клуба
Сообщений: 1662
Регистрация: 22.8.2003
Где: Краснодар

Репутация: нет
Всего: 36



Честно говоря, меня тоже сильно смущает его поддержка, а кроме того, не покидает ощущение недоделанности.

З.Ы.
Цитата
Найти толковый форум по Python удалось только спустя пол года, после того как начал его изучать.

Ну, давай тут сделаем толковый форум. smile
..
Цитата
да уж, надеюсь korob2001 уже отыскал решение и не забросил python.

Раз уж заговорили (сорри за оффтоп..), не подскажешь, где обоснован выбор имено Python'a? Для каких задач?


--------------------
Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед)
...
Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн)
PM ICQ   Вверх
setq
Дата 12.11.2004, 17:17 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











в свою очередь тоже сорри за оффтоп, просто я решаю задачи, которые обычно решаются на Perl и я не люблю Perl.
  Вверх
korob2001
Дата 13.11.2004, 21:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: нет
Всего: 61



Цитата

Ну, давай тут сделаем толковый форум.

Поддерживаю.
Цитата

в свою очередь тоже сорри за оффтоп, просто я решаю задачи, которые обычно решаются на Perl и я не люблю Perl.

Чем же Perl тебя так не устроил? Только не подумай что я придераюсь, просто интересно, я например его обажаю.
Цитата

Раз уж заговорили (сорри за оффтоп..), не подскажешь, где обоснован выбор имено Python'a? Для каких задач?

Впринципе на Perl можно написать всё, что можно написать и на Python и наоборот. Но объектная модэль Python, очень похожа на Java. А выучить Java, это моя мечта.
Говорят что Python приучает к хорошему стилю программирования, да и к тому же это язык, очень интенсивно, набирает силу.

Это сообщение отредактировал(а) korob2001 - 13.11.2004, 21:39


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
setq
Дата 15.11.2004, 20:50 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











даже не знаю что ответить, korob2001. просто не нравится.
  Вверх
foRaver
Дата 16.11.2004, 18:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 561
Регистрация: 6.7.2003
Где: Düsseldorf

Репутация: нет
Всего: 3



А разве возможно использовать Perl и OpenGL вместе? smile
Python это позволяет: PyGame
PM MAIL WWW ICQ YIM   Вверх
korob2001
Дата 17.11.2004, 23:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: нет
Всего: 61



Цитата

даже не знаю что ответить, korob2001. просто не нравится.

Да и ладно, дело хозяйское ;).
Я, например, тоже не могу объяснить, почему мне нравится Perl.
Цитата

А разве возможно использовать Perl и OpenGL вместе?

Здесь лежат модули под Perl. Лично я никогда этим не пользовался, но помоему они как-раз для работы с OpenGL.
http://search.cpan.org/search?query=OpenGL&mode=all

Это сообщение отредактировал(а) korob2001 - 17.11.2004, 23:11


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Python: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1405 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.