Qual è un buon modo per trovare l'indice di un elemento in una matrice in python? Si noti che la matrice non può essere ordinata. Esiste un modo per specificare quale operatore di confronto utilizzare?Python: trovare un elemento in una matrice
risposta
Il modo migliore è probabilmente utilizzare il metodo list .index.
Per gli oggetti nella lista, si può fare qualcosa di simile:
def __eq__(self, other):
return self.Value == other.Value
con qualsiasi trattamento speciale è necessario.
È inoltre possibile utilizzare una per/in dichiarazione con enumerate (arr)
Esempio di trovare l'indice di un elemento che ha valore> 100.
for index, item in enumerate(arr):
if item > 100:
return index, item
C'è il metodo index
, i = array.index(value)
, ma non penso che sia possibile specificare un operatore di confronto personalizzato. Però non sarebbe difficile scrivere la propria funzione:
def custom_index(array, compare_function):
for i, v in enumerate(array):
if compare_function(v):
return i
Da Dive Into Python :
>>> li
['a', 'b', 'new', 'mpilgrim', 'z', 'example', 'new', 'two', 'elements']
>>> li.index("example")
5
Il metodo di indicizzazione di un li st lo farà per te. Se si desidera garantire l'ordine, ordinare prima l'elenco utilizzando sorted()
. Ordinati accetta un cmp o un parametro chiave per dettare come l'ordinamento accadrà:
a = [5, 4, 3]
print sorted(a).index(5)
Oppure:
a = ['one', 'aardvark', 'a']
print sorted(a, key=len).index('a')
come va questo?
def global_index(lst, test):
return (pair[0] for pair in zip(range(len(lst)), lst) if test(pair[1]))
Usage:
>>> global_index([1, 2, 3, 4, 5, 6], lambda x: x>3)
<generator object <genexpr> at ...>
>>> list(_)
[3, 4, 5]
Ottieni pythonic: def global_index (lst, test): return (idx per idx, val in enumerate (lst) if test (val)) Filtro – recursive
(lambda x: x> 3, [1,2,3,4,5,6]) –
Ecco un altro modo tramite di lista (alcune persone potrebbero trovare discutibile). È molto accessibile per i test semplici, ad es. i confronti su attributi degli oggetti (che ho bisogno di un sacco):
el = [x for x in mylist if x.attr == "foo"][0]
Naturalmente questo presuppone l'esistenza (e, in realtà, unicità) di un elemento idoneo secondo l'ordine.
'el = [x per x in mylist se x.attr ==" foo "]' 'se el : fare qualcosa con el [0] ' risolve il problema" esistenza " – berkus
supponendo che si vuole trovare un valore in una matrice NumPy, immagino qualcosa di simile potrebbe funzionare:
Numpy.where(arr=="value")[0]
Se si desidera solo per scoprire se un elemento è contenuto nella lista o no:
>>> li
['a', 'b', 'new', 'mpilgrim', 'z', 'example', 'new', 'two', 'elements']
>>> 'example' in li
True
>>> 'damn' in li
False
la risposta è la migliore! =) – holms
Ho trovato questo adattando alcuni tutorial.Grazie a Google, e per tutti voi;)
def findall(L, test):
i=0
indices = []
while(True):
try:
# next value in list passing the test
nextvalue = filter(test, L[i:])[0]
# add index of this value in the index list,
# by searching the value in L[i:]
indices.append(L.index(nextvalue, i))
# iterate i, that is the next index from where to search
i=indices[-1]+1
#when there is no further "good value", filter returns [],
# hence there is an out of range exeption
except IndexError:
return indices
Una molto semplice uso:
a = [0,0,2,1]
ind = findall(a, lambda x:x>0))
[2, 3]
P.S. Scuse mio inglese
uso funzione che restituisce indice del corrispondente elemento (Python 2.6):
def index(l, f):
return next((i for i in xrange(len(l)) if f(l[i])), None)
Quindi utilizzare tramite funzione lambda per aver recuperato elemento necessario per qualsiasi equazione richiesto ad esempio usando il nome dell'elemento.
element = mylist[index(mylist, lambda item: item["name"] == "my name")]
Se ho bisogno di usarlo in più punti nel mio codice, ho appena definito la funzione di ricerca specifica, ad es. per la ricerca di elementi per nome:
def find_name(l, name):
return l[index(l, lambda item: item["name"] == name)]
E poi è abbastanza facile e leggibile:
element = find_name(mylist,"my name")
- 1. Trovare un elemento in una matrice in Java
- 2. Trovare la posizione di un elemento in una matrice bidimensionale?
- 3. Come seleziono un elemento casuale da una matrice in Python?
- 4. trovare l'ultima occorrenza di un elemento in un python elenco
- 5. Come estrarre un elemento particolare da una matrice in BASH?
- 6. Trova elementi che circondano un elemento in una matrice
- 7. julia seleziona tutti tranne un elemento in matrice/matrice
- 8. Qual è l'algoritmo più veloce per trovare un elemento con più alta frequenza in una matrice
- 9. Come trovare rapidamente l'indice di un elemento in una matrice multidimensionale?
- 10. traspone/ruota un blocco di una matrice in python
- 11. Indice di un elemento in una matrice utilizzando Java
- 12. rimuovere un elemento da una matrice in base al valore
- 13. eliminare un elemento da una matrice in ASP classico
- 14. Verifica se un elemento esiste in una matrice
- 15. Trovare un elemento specifico in un NSArrayController
- 16. Prendi l'ultimo elemento di una matrice
- 17. Come trovare la posizione di un elemento in una lista, in Python?
- 18. Trovare indice massimo elemento dalla lista Python
- 19. Importare file csv in una matrice/matrice in Python
- 20. Trovare il massimo comun divisore di una matrice in MATLAB
- 21. Trovare elemento minimo di matrice e il suo indice
- 22. Converti immagine in una matrice in python
- 23. trovare un elemento in una lista di tuple
- 24. Come verificare se una tupla contiene un elemento in Python?
- 25. Controllare se una chiave è l'ultimo elemento in una matrice?
- 26. matrice di correlazione in python
- 27. elemento rimuovi dalla matrice
- 28. Python: Sostituzione di valori in una matrice
- 29. stampa di una matrice bidimensionale in python
- 30. avvolgere una matrice numpy in python
Grazie, questo era esattamente quello che stavo cercando, e ha funzionato perfettamente! –
Ma questo codice dà errore quando l'elemento non è nella lista. Nel contesto di esempio corrente se cerco 'tre' (cioè: li.index ('tre')) restituisce un errore. –
È possibile rilevare l'errore per rilevare quando qualcosa non è presente nell'elenco. 'prova: li.index (" tre ") eccetto ValueError: found = false' –