¿Cuál es una buena forma de encontrar el índice de un elemento en una matriz en python? Tenga en cuenta que la matriz no puede ser ordenada. ¿Hay alguna manera de especificar qué operador de comparación usar?Python: encontrar un elemento en una matriz
Respuesta
La mejor manera es probablemente usar el método de la lista .index.
Para los objetos de la lista, puede hacer algo como:
def __eq__(self, other):
return self.Value == other.Value
con ningún proceso especial que necesita.
También puede utilizar una de/en la declaración con enumerate (arr)
Ejemplo de encontrar el índice de un elemento que tiene un valor> 100.
for index, item in enumerate(arr):
if item > 100:
return index, item
Existe el método index
, i = array.index(value)
, pero no creo que pueda especificar un operador de comparación personalizado. No sería difícil de escribir su propia función para hacerlo, sin embargo:
def custom_index(array, compare_function):
for i, v in enumerate(array):
if compare_function(v):
return i
De Dive Into Python :
>>> li
['a', 'b', 'new', 'mpilgrim', 'z', 'example', 'new', 'two', 'elements']
>>> li.index("example")
5
El método de índice de un li st hará esto por ti. Si quiere garantizar el orden, ordene la lista primero usando sorted()
. Ordenado acepta un cmp o parámetro clave para dictar la forma en la clasificación va a suceder:
a = [5, 4, 3]
print sorted(a).index(5)
O:
a = ['one', 'aardvark', 'a']
print sorted(a, key=len).index('a')
cómo es éste?
def global_index(lst, test):
return (pair[0] for pair in zip(range(len(lst)), lst) if test(pair[1]))
Uso:
>>> global_index([1, 2, 3, 4, 5, 6], lambda x: x>3)
<generator object <genexpr> at ...>
>>> list(_)
[3, 4, 5]
Get pythonic: def global_index (lst, test): return (idx para idx, val en enumerate (lst) if test (val)) – recursive
filtro (lambda x: x> 3, [1,2,3,4,5,6]) –
Aquí es otra manera usando listas por comprensión (algunas personas que le resulte discutible). Es muy accesible para pruebas simples, p. comparaciones sobre atributos de los objetos (que lo necesita una gran cantidad):
el = [x for x in mylist if x.attr == "foo"][0]
Por supuesto, esto supone la existencia (y, en realidad, la singularidad) de un elemento adecuado en la lista.
'el = [x para x en mylist si x.attr ==" foo "]' 'if el : hacer algo con el [0] ' resuelve el problema de" existencia " – berkus
suponiendo que desea buscar un valor en una matriz numpy, supongo que algo como esto podría funcionar:
Numpy.where(arr=="value")[0]
Si lo que desea es averiguar si un elemento se encuentra en la lista o no:
>>> li
['a', 'b', 'new', 'mpilgrim', 'z', 'example', 'new', 'two', 'elements']
>>> 'example' in li
True
>>> 'damn' in li
False
que responde es el mejor! =) – holms
Encontré esto adaptando algunos tutos.Gracias a Google, y para todos ustedes;)
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
Un uso muy sencillo:
a = [0,0,2,1]
ind = findall(a, lambda x:x>0))
[2, 3]
P. S. scuse mi Inglés
utilizo función para el retorno de índice para el elemento de adaptación (Python 2.6):
def index(l, f):
return next((i for i in xrange(len(l)) if f(l[i])), None)
Entonces utilizarlo través de la función lambda para recuperar elemento necesario por cualquier ecuación requerida, por ejemplo, usando el nombre del elemento.
element = mylist[index(mylist, lambda item: item["name"] == "my name")]
Si necesito usarlo en varios lugares en mi código solo defino la función de búsqueda específica, p. Ej. para encontrar elemento por su nombre:
def find_name(l, name):
return l[index(l, lambda item: item["name"] == name)]
Y entonces es muy fácil y legible:
element = find_name(mylist,"my name")
- 1. Encontrar un elemento en una matriz en Java
- 2. Formas efectivas de encontrar un elemento en una matriz Javascript
- 3. ¿Encontrar la posición de un elemento en una matriz bidimensional?
- 4. Encontrar la posición de un elemento en una matriz sencilla
- 5. ¿Cómo selecciono un elemento aleatorio de una matriz en Python?
- 6. Python: configuración de un elemento de una matriz Numpy
- 7. Python- encontrar el elemento con eventos máximo en una lista
- 8. Encontrar vecinos en una matriz bidimensional
- 9. Cómo encontrar y modificar un valor en una matriz anidada
- 10. ¿Cómo obtengo el índice de un elemento en una matriz?
- 11. índice del elemento en una matriz multidimensional
- 12. PHP agregar un elemento de una matriz
- 13. Encontrar un elemento específico en un NSArrayController
- 14. Eliminar un elemento de una matriz (Java)
- 15. Encontrar elemento mínimo en matriz, y su índice de
- 16. ¿Cómo encontrar la posición de un elemento en una lista, en Python?
- 17. Python (NumPy, SciPy), encontrar el espacio nulo de una matriz
- 18. Grep para encontrar el elemento en la matriz Perl
- 19. ¿Cómo puedo encontrar las ubicaciones de un elemento en una lista de listas de Python?
- 20. Linq: Encontrar elemento en una colección
- 21. cómo insertar un elemento asociativo en una matriz en javascript?
- 22. Encontrar un elemento en una lista <> con C#
- 23. ¿Cómo encontrar el índice de un elemento en una lista?
- 24. ¿Cómo encontrar un elemento con una ID en JavaFX?
- 25. Encontrar elemento específico basado en un atributo
- 26. importar una matriz en python
- 27. ¿Cómo implementar una matriz asociativa (no un diccionario) en Python?
- 28. Encontrar una coincidencia en un campo de matriz
- 29. Encontrar un valor inusual en una matriz, list
- 30. IOS - encontrar un objeto complejo en una matriz
Gracias, esto era exactamente lo que estaba buscando, y funcionó perfectamente! –
Pero este código da error cuando el elemento no está en la lista. En el contexto del ejemplo actual si busco 'tres' (es decir, li.index ('tres')) da error. –
Puede detectar el error para detectar cuando algo no está en la lista. 'try: li.index (" tres ") excepto ValueError: found = false' –