Форум сайта python.su
0
Всем привет!
Недавно начал изучать питон и сегодня выполняя задание по курсу на неком интернет-ресурсе столкнулся с любопытной вещью.
Задание: дан список элементов, найти в нём все что начинаются на “c”, удалить их и вывести что осталось.
Первоначально я сделал так:
list = ['cinty','olsen','barry','cantella','cori','supreme'] for item in list: if item.startswith('c'): list.remove(item) print(list)
list = ['cinty','olsen','barry','cantella','cori','supreme'] for item in list[::1]: if item.startswith('c'): list.remove(item) print(list)
for item in list:
for item in list[::1]:
Отредактировано lkk (Сен. 7, 2017 16:09:30)
Офлайн
568
lkk
Выходит, что цикл
lkkИменно! Дело в том, что никак иначе оно итерироваться просто не может. Список - это тот же массив, но с автоматическим выделением памяти и копированием элементов. Один черт в памяти должна быть выделена область, в которую последовательно записываются указатели на объекты-члены коллекции. Никакой магии.
итерирует по индексам списка, а
Офлайн
6
lkk
Выходит, что цикл
for item in list:
итерирует по индексам списка, а
for item in list:
по его элементам. Вернее я так предполагаю.
list[::1]
list[:]
list[::1]
lst = ['cinty','olsen','barry','cantella','cori','supreme'] lst = [i for i in lst if not i.startswith('c')] print(lst)
lst = ['cinty','olsen','barry','cantella','cori','supreme'] lst = list(filter(lambda x: x.startswith('c'), lst)) print(lst)
Отредактировано Vintets (Сен. 7, 2017 17:41:12)
Офлайн
0
Теперь понял. Спасибо! 
Офлайн