2016-04-21 23 views
5

ho creato una lista (che è ordinata):numeri estrazione dalla lista

indexlist = [0, 7, 8, 12, 19, 25, 26, 27, 29, 30, 31, 33] 

voglio estrarre i numeri da questa lista che sono almeno cinque distanti e li input in un altro elenco . Questo è un po 'di confusione. Questo è un esempio di come voglio l'output:

outlist = [0, 7, 19, 25, 31] 

Come si può vedere, nessuno dei numeri si trovano a 5 l'uno dall'altro.

Ho provato questo metodo:

for index2 in range(0, len(indexlist) - 1): 
     if indexlist[index2 + 1] > indexlist[index2] + 5: 
      outlist.append(indexlist[index2]) 

Tuttavia, questo mi dà questo output:

outlist = [0, 12, 19] 

Certo, i numeri sono almeno 5 di distanza, però, mi manca un po ' valori necessari

Qualche idea su come posso portare a termine questo compito?

+0

Cosa intendi per "cinque di distanza l'uno dall'altro"? Cinque cosa? Posizioni o valore-saggio? – Andrey

+0

Valore @Andrey. controlla l'esempio, è abbastanza chiaro. –

+0

@Andrey value-wise – interstellar

risposta

4

è necessario tenere traccia dell'ultimo elemento si è aggiunto alla lista, non solo per confrontare il seguente valore:

In [1]: indexlist = [0, 7, 8, 12, 19, 25, 26, 27, 29, 30, 31, 33] 
In [2]: last = -1000 # starting value hopefully low enough :) 
In [3]: resultlist = [] 
In [4]: for item in indexlist: 
    ...:  if item > last+5: 
    ...:   resultlist.append(item) 
    ...:   last = item 
    ...: 
In [5]: resultlist 
Out[5]: [0, 7, 19, 25, 31] 
+0

Funziona perfettamente. Grazie mille :) – interstellar

1

Questo dovrebbe fare il trucco. Qui, come ho detto nel commento, lo outlist viene inizializzato con il primo valore di indexlist e gli elementi iterati indexlist vengono confrontati con esso. È una soluzione approssimativa. Ma funziona.

indexlist = [0, 7, 8, 12, 19, 25, 26, 27, 29, 30, 31, 33] 
outlist = [indexlist[0]] 

for index2 in range(1, len(indexlist) - 1): 
     if indexlist[index2] > (outlist[-1] + 5): 
      outlist.append(indexlist[index2]) 

uscita:

>>outlist 

[0, 7, 19, 25, 31] 
0

suppongo tuo index_list è ordinato. Quindi questo ti darà solo gli indici MIN_INDEX_OFFSET a parte.

MIN_INDEX_OFFSET = 5; 

index_list = [0, 7, 8, 12, 19, 25, 26, 27, 29, 30, 31, 33]; 
last_accepted = index_list[0]; 
out_list = [last_accepted]; 

for index in index_list: 
    if index-last_accepted > MIN_INDEX_OFFSET: 
    out_list.append(index); 
    last_accepted = index; 

print(out_list) 
1

La risposta di Tim Pietzcker è corretta, ma può anche essere eseguita senza memorizzare l'ultimo elemento aggiunto in una variabile separata. Invece puoi leggere l'ultimo valore in lista:

>>> indexlist = [0, 7, 8, 12, 19, 25, 26, 27, 29, 30, 31, 33] 
>>> outlist = [] 
>>> for n in indexlist: 
...  if not outlist or n > outlist[-1] + 5: 
...   outlist.append(n) 
... 
>>> outlist 
[0, 7, 19, 25, 31] 
Problemi correlati