Форум сайта python.su
0
Добрый день!
Пишу на С++, но сейчас появилась необходимость решить задачу на Python. Столкнулся со следующим странным поведение:
m = [[1], [2]] m = m * 2; id = 0; fl = 1; for i in range(0, 2): for j in range(0, 2): m[id].append(fl); id = id + 1; fl = fl + 1;
Офлайн
14
В питоне все типы передаются по ссылке, у тебя есть несколько ссылок на список fl, соответственно, если ты его изменяешь, то эти изменения появляются по всем ссылкам.
Офлайн
0
odnochlen
В питоне все типы передаются по ссылке, у тебя есть несколько ссылок на список fl, соответственно, если ты его изменяешь, то эти изменения появляются по всем ссылкам.
Офлайн
14
fl[:]
Офлайн
0
Вопрос тоже немного по теме 
задание: удалить элементы списка, равные нулю.
вот есть мой код:
a=[1,2,0,0,65] i=0 for el in a: if a[i]==0: del a[i] i=i+1 print(a)
Офлайн
16
...
if a[i] == 0:
del a[i]
else:
i = i + 1
lst = [1, 2, 0, 0, 65] lst = [elem for elem in lst if elem != 0] print(lst)
Офлайн
43
там индексы смещаются при удалении
попробуй
a = [1,2,0,0,65] b = [e for e in a if e] b Out[3]: [1, 2, 65]
Офлайн
0
спасибо за ответы. я только не совсем понимаю конструкцию фрагмента
b = [e for e in a if e]
Отредактировано nickmetal (Янв. 11, 2013 12:59:49)
Офлайн
43
Офлайн
32
sergeek
там индексы смещаются при удалении
попробуйa = [1,2,0,0,65] b = [e for e in a if e] b Out[3]: [1, 2, 65]
a = [1,2,0,0,65] b = filter(None, a) # или b = filter(bool, a) > [1, 2, 65]
Отредактировано o7412369815963 (Янв. 13, 2013 12:47:15)
Офлайн