2016-04-19 15 views
5

Mam program Patrzę przez iz tej sekcjiLogical indeksowanie z listami

temp = [1,2,3,4,5,6] 
temp[temp!=1]=0 
print temp 

Które jeśli run daje wynik:

[1, 0, 3, 4, 5, 6] 

Potrzebuję pomocy w zrozumieniu tego, co się dzieje w ten kod, który prowadzi do tego wyniku.

Odpowiedz

3

Jako Już wyjaśniono, że ustawiasz drugi element, używając wyniku porównywania z listą, która zwraca True/1 jako bool is a subclass of int. Masz nie z wykazu numpy tablicy więc trzeba iteracyjne nad nim, jeśli chcesz go, które można zrobić z listowego przy użyciu zmienić, jeśli/ELS e logicznych:

temp = [1,2,3,4,5,6] 
temp[:] = [0 if ele != 1 else ele for ele in temp ] 

która daje:

[1, 0, 0, 0, 0, 0] 

lub używając wyrażenia generator:

temp[:] = (0 if ele != 1 else ele for ele in temp) 
7

temp w przykładzie jest list, co oczywiście nie jest równa 1. A zatem wyrażenie

temp[temp != 1] = 0 

jest rzeczywiście

temp[True] = 0 # or, since booleans are also integers in CPython 
temp[1] = 0 

Konwersja temp do tablicy numpy aby uzyskać zachowanie nadawania potrzebujesz:

>>> import numpy as np 
>>> temp = np.array([1,2,3,4,5,6]) 
>>> temp[temp != 1] = 0 
>>> temp 
array([1, 0, 0, 0, 0, 0]) 
3

Jeśli NumPy nie jest opcją, użyj al Zrozumienie, aby zbudować nową listę.

>>> temp = [1,2,3,4,5,6] 
>>> [int(x == 1) for x in temp] 
[1, 0, 0, 0, 0, 0]