¿Existe una función de contenido breve para listas?

Resuelto Joan Venge asked hace 12 años • 6 respuestas

Dada una lista xsy un valor item, ¿cómo puedo verificar si xscontiene item(es decir, si alguno de los elementos de xses igual a item)? ¿ Hay algo así xs.contains(item)?


Para consideraciones de rendimiento, consulte La forma más rápida de comprobar si existe un valor en una lista .

Joan Venge avatar Oct 17 '12 19:10 Joan Venge
Aceptado

Usar:

if my_item in some_list:
    ...

Además, operación inversa:

if my_item not in some_list:
    ...

Funciona bien para listas, tuplas, conjuntos y dictados (verificar claves).

Tenga en cuenta que esta es una operación O(n) en listas y tuplas, pero una operación O(1) en conjuntos y dictados.

defuz avatar Oct 17 '2012 12:10 defuz

Además de lo que otros han dicho, también te puede interesar saber que lo que inhace es llamar al list.__contains__método, que puedes definir en cualquier clase que escribas y que puede resultar extremadamente útil para usar Python en toda su extensión.  

Un uso tonto puede ser:

>>> class ContainsEverything:
    def __init__(self):
        return None
    def __contains__(self, *elem, **k):
        return True


>>> a = ContainsEverything()
>>> 3 in a
True
>>> a in a
True
>>> False in a
True
>>> False not in a
False
>>>         
Ant avatar Oct 17 '2012 12:10 Ant

Recientemente se me ocurrió esta línea para saber Truesi una lista contiene cualquier cantidad de apariciones de un elemento, o Falsesi no contiene ninguna ocurrencia o nada en absoluto. El uso next(...)le da a esto un valor de retorno predeterminado ( False) y significa que debería ejecutarse significativamente más rápido que ejecutar toda la lista de comprensión.

list_does_contain = next((True for item in list_to_test if item == test_item), False)

Dustin Raimondi avatar Jan 25 '2017 23:01 Dustin Raimondi

El método de lista indexdevolverá -1si el elemento no está presente y devolverá el índice del elemento en la lista si está presente. Alternativamente, en una ifdeclaración puede hacer lo siguiente:

if myItem in list:
    #do things

También puede verificar si un elemento no está en una lista con la siguiente declaración if:

if myItem not in list:
    #do things
Mr. Squig avatar Oct 17 '2012 12:10 Mr. Squig

También existe el método de lista:

[2, 51, 6, 8, 3].__contains__(8)
# Out[33]: True
[2, 51, 6, 3].__contains__(8)
# Out[33]: False
Andreas avatar May 26 '2021 13:05 Andreas