#python
Почему не работает этот код? for a in massiv: for b in massiv: if len(a)> len(b): del b elif len(a)Ответы
Ответ 1
Код не работает, т.к. инструкция del не удаляет элемент, а уменьшает число ссылок на него на 1, del a означает, что нужно уменьшить число ссылок на элемент списка, на который ссылается a, но т.к. в списке остается ссылка на этот элемент, то он никуда не удаляется.Ответ 2
Странная логика у вашего скрипта =). Но всеже. Во время итерации по массивам в питоне не допускается удаление элементов. Для этого либо сделайте копию списка - massiv[:], либо итерируйте по старинке - по индексам. В случае индексов вы получаете доступ к элементам исходного массива. massiv = ['12', '123', '1234'] for i in range(len(massiv) - 1): for j in range(len(massiv) - 1): if len(massiv[i]) > len(massiv[j]): del massiv[j] elif len(massiv[i]) < len(massiv[j]): del massiv[i] print massiv # => ['1234']Ответ 3
maxlen= max([len(i) for i in massiv]) massiv=filter(lambda x: len(x)=maxlen, massiv)Ответ 4
for a in massiv: for b in massiv: if len(a)> len(b): massiv.remove(b) elif len(a)Ответ 5
Чтобы удалить элемент из списка lst, если известен его индекс i: del lst[i] Чтобы удалить все элементы, кроме элемента с наибольшей длиной: lst[:] = [max(lst, key=len)] Идиоматический способ удалить элементы из списка, удовлетворяющие заданному условию, собрать элементы, которые следует оставить и заменить ими все элементы в списке: lst[:] = [item for item in lst if keep(item)]Ответ 6
Во-первых, это кортеж или статический массив? Во-вторых, a и b - это не элементы, это просто моментальное представление. Должно так быть: for a in massiv: for b in massiv: if len(a)> len(b): del massiv[b] elif len(a)Ответ 7
Удаляем элемент: a = [1,3,5,7,4] n = int(input()) a.pop(n) print(*a, sep=" ")
Комментариев нет:
Отправить комментарий