Форум сайта python.su
0
Привет всем,
Передаю в функцию список, функция обрабатывает его и изменяет (returnом не возвращаю - списков несколько…)
print 'До входа в список', len(List2List) print 'До вызова функции', len(List2List) func(text, List2List) print 'После вызова функции', len(List2List)
print 'До удаление дублей',len(List2List) List2List = list(set(List2List)) print 'После удаление дублей', len(List2List)
До входа в список 1
До удаление дублей 19
После удаление дублей 9
После вызова функции 19
Отредактировано lEXA (Май 2, 2013 15:06:00)
Офлайн
43
можно воспользоваться чем-то вроде
def del_dub(ls): to_delete = [i for i,e in enumerate(ls) if e in ls[i+1:]] for bad_idx in reversed(to_delete): del ls[bad_idx] l = [1,1,1,2,2,3,3,4,4,2] del_dub(l) l Out[4]: [1, 3, 4, 2]
Офлайн
0
sergeekВопрос не в дублях (я парсю веб страницу и удаляю одинаковые ссылки, дубли удаляются железно (проверял глазками)) - а в том что почему то список в функции один - 9 или 10 элементов.
но ты там явно что-то не так делаешь. Может даже эти твои дубли можно избежать на этапе формирования списка
Офлайн
43
ну то что присвоишь какое-либо значение аргументу, через который ты передал свой список - исходного списка не изменит. Списки передаются указателем а не ссылками
Офлайн
0
Так - у меня функция должна менять два списка
То есть у меня есть два варианта:
- объявлять оба списка глобальными и их потом менять через их значение. Это минус для меня - надо помнить что данная функция менять только те переменные.
- либо придумать тип из двух списоков и их возвращать через return?
PS Ну или разбивать функцию на две функии и возвращать каждый список через return
Офлайн
43
да, только тип придумывать не надо - для этого есть кортеж
Офлайн
0
Через кортеж вернуть две списка (я это и подразумевал выше но я только в начале python way)? Вариант. Легкий костыль конечно но..
Спасибо!
Завтра подумаю либо на две функции либо да кортежем
Офлайн
0
И все равно не догоняю почему 19 тогда возвращается:
Программа
List2List=[] List2List.append(url) response = urllib2.urlopen(url) text = response.read() print 'До вызова функции', len(List2List) ff(text, List2Url, List2List) print 'После вызова функции', len(List2List)
def ff(text, List2Url, List2List): # много чего делаем # Уберем дубли из списков List2List.sort(key=str.lower) print 'До удаление дублей',len(List2List) List2List = list(set(List2List)) print 'После удаление дублей', len(List2List) List2List.append('2222') print 'Добавили', len(List2List)
До вызова функции 1 До удаление дублей 19 После удаление дублей 9 Добавили 10 После вызова функции 19
Офлайн
253
lEXA
И все равно не догоняю почему 19 тогда возвращается:
List2List = list(set(List2List))
List2List[:] = list(set(List2List))
Офлайн
0
doza_andБинго! Огромное спасибо! Завтра буду знать с какого момента продолжить читать книгу:-)
А это уже перезапись содержимого
Офлайн