2014-01-24 3 views
-1

Предположим, у меня есть список A = [None, None, None, None, None, None, 1, 2, 3, 4]. На данный момент размер списка равен 10. Теперь я хочу удалить определенный элемент, скажем 1, но в то же время я хочу, чтобы 1 был заменен на None и размер списка сохранен. Удаление 1 не должны изменять размер списка до 9.Удалить элементы в списке и сохранить размер списка в Python?

+2

Просто .. присвойте указателю желаемое значение. – user2864740

ответ

2

Если вы хотите удалить только первый элемент, вы можете сделать это

A[A.index(1)] = None 

Но, если вы хотите заменить все 1 с в список, вы можете использовать этот список comprehenesion

A = [None if item == 1 else item for item in A] 

Если вы хотите сделать INPLACE замены, вы можете сделать это следующим образом (благодаря @Jonas)

A[:] = [None if item == 1 else item for item in A] 

Вы можете написать общие функции, как этого

A, B = [None,None, None, None, None, None, 1, 1, 3, 4], [1, 1, 1] 

def replace(input_list, element, replacement): 
    try: 
     input_list[input_list.index(element)] = None 
    except ValueError, e: 
     pass 
    return input_list 

def replace_all(input_list, element, replacement): 
    input_list[:] = [replacement if item == element else item for item in input_list] 
    return input_list 

print replace(A, 1, None) 
print replace_all(B, 1, None) 

Выход

[None, None, None, None, None, None, None, 1, 3, 4] 
[None, None, None] 
+2

Обратите внимание, что второй оператор не * на месте *, в отличие от первого (и обычного '' del'' оператора, который не применяется к этому вопросу). Чтобы сделать второй оператор * на месте *, вы должны изменить левую сторону на '' A [:] '' (просто sayin ', может вызвать путаницу). –

+1

@JonasWielicki Спасибо мужчине :) Обновлен мой ответ. – thefourtheye

+0

Замена на место стоит дополнительных ресурсов только тогда, когда список ** A ** ссылается на другие объекты – volcano

1

Если вы знаете только значение, это заменит первого появление на:

A[A.index(1)] = None 

Если вы знаете индекс:

A[6] = None 
Смежные вопросы