Python - Librería Bisect
#1. Importar la librería bisect:
import bisect
#2. Encontrar el índice donde un elemento debería ser
#insertado en una lista ordenada:
index = bisect.bisect_left(lista, elemento)
#3. Insertar un elemento en una lista ordenada manteniendo
#el orden:
bisect.insort_left(lista, elemento)
#4. Encontrar el índice donde un elemento debería ser
#insertado en una lista ordenada de manera descendente:
index = bisect.bisect_right(lista, elemento)
#5. Insertar un elemento en una lista ordenada de manera
#descendente manteniendo el orden:
bisect.insort_right(lista, elemento)
#6. Utilizar una función personalizada para comparar
#elementos en lugar del operador < :
bisect.bisect_left(lista, elemento, key=lambda x: x.atributo)
#7. Encontrar el índice donde un elemento debería ser
#insertado en una lista de tuplas ordenada por el segundo
#elemento de cada tupla:
index = bisect.bisect_left(lista, (elemento1, elemento2), key=lambda x: x[1])
#8. Insertar una tupla en una lista de tuplas ordenada por
#el segundo elemento de cada tupla manteniendo el orden:
bisect.insort_left(lista, (elemento1, elemento2), key=lambda x: x[1])
#9. Encontrar el índice donde un objeto debería ser
#insertado en una lista ordenada utilizando un método
#personalizado para comparar objetos:
index = bisect.bisect_left(lista, objeto, key=lambda x: x.metodo())
#10. Insertar un objeto en una lista ordenada utilizando un
#método personalizado para comparar objetos manteniendo el
#orden:
bisect.insort_left(lista, objeto, key=lambda x: x.metodo())
#11. Encontrar el índice donde un elemento debería ser
#insertado en una lista ordenada utilizando la función
#`_lt` del elemento para comparar:
index = bisect.bisect_left(lista, elemento)
#12. Insertar un elemento en una lista ordenada utilizando
#la función `lt` del elemento para comparar manteniendo el
#orden:
bisect.insort_left(lista, elemento)
#13. Encontrar el índice donde un elemento debería ser
#insertado en una lista de objetos personalizados ordenada
#por un atributo específico:
index = bisect.bisect_left(lista, objeto, key=lambda x: x.atributo)
#14. Insertar un objeto personalizado en una lista ordenada
#por un atributo específico manteniendo el orden:
bisect.insort_left(lista, objeto, key=lambda x: x.atributo)
#15. Encontrar el índice donde un elemento debería ser
#insertado en una lista de diccionarios ordenada por un
#valor específico:
index = bisect.bisect_left(lista, {'clave': valor}, key=lambda x: x['clave'])
#16. Insertar un diccionario en una lista de diccionarios
#ordenada por un valor específico manteniendo el orden:
bisect.insort_left(lista, {'clave': valor}, key=lambda x: x['clave'])`
#17. Encontrar el índice donde un elemento debería ser
#insertado en una lista de objetos personalizados
#utilizando la función `lt` del objeto para comparar y
#un atributo específico como segundo criterio:
index = bisect.bisect_left(lista, objeto, key=lambda x: (x.atributo1, x))
#18. Insertar un objeto personalizado en una lista ordenada
#utilizando la función `lt_` del objeto para comparar y un
#atributo específico como segundo criterio manteniendo el
#orden:
bisect.insort_left(lista, objeto, key=lambda x: (x.atributo1, x))
#19. Encontrar el índice donde una cadena debería ser
#insertada en una lista de cadenas ordenada por longitud:
index = bisect.bisect_left(lista, cadena, key=len)
#20. Insertar una cadena en una lista de cadenas ordenada
#por longitud manteniendo el orden:
bisect.insort_left(lista, cadena, key=len)
#21. Encontrar el índice donde un elemento debería ser
#insertado en una lista de objetos personalizados
#utilizando la función `_lt` del objeto para comparar y
#dos atributos específicos como segundo y tercer criterio:
index = bisect.bisect_left(lista, objeto, key=lambda x: (x.atributo1, x.atributo2, x))
#22. Insertar un objeto personalizado en una lista ordenada
#utilizando la función `lt` del objeto para comparar y dos
#atributos específicos como segundo y tercer criterio
#manteniendo el orden:
bisect.insort_left(lista, objeto, key=lambda x: (x.atributo1, x.atributo2, x))
#23. Encontrar el índice donde un elemento debería ser
#insertado en una lista de objetos personalizados utilizando
#la función `lt` del objeto para comparar y un atributo
#específico que es otra lista como segundo criterio:
index = bisect.bisect_left(lista, objeto, key=lambda x: (x.atributo1, x.atributo2[0]))
#24. Insertar un objeto personalizado en una lista ordenada
#utilizando la función `lt` del objeto para comparar y un
#atributo específico que es otra lista como segundo criterio
#manteniendo el orden:
bisect.insort_left(lista, objeto, key=lambda x: (x.atributo1, x.atributo2[0]))
#25. Encontrar el índice donde un elemento debería ser
#insertado en una lista de objetos personalizados utilizando
#la función `lt` del objeto para comparar y una función
#personalizada como segundo criterio:
index = bisect.bisect_left(lista, objeto, key=lambda x: (x.atributo1, funcion(x.atributo2)))
#26. Insertar un objeto personalizado en una lista ordenada
#utilizando la función `lt` del objeto para comparar y una
#función personalizada como segundo criterio manteniendo el
#orden:
bisect.insort_left(lista, objeto, key=lambda x: (x.atributo1, funcion(x.atributo2)))
#27. Encontrar el índice donde un elemento debería ser
#insertado en una lista de objetos personalizados utilizando
#la función `lt` del objeto para comparar y un atributo
#específico que es una fecha como segundo criterio:
index = bisect.bisect_left(lista, objeto, key=lambda x: (x.atributo1, x.atributo2.fecha()))
#28. Insertar un objeto personalizado en una lista ordenada
#utilizando la función `lt` del objeto para comparar y un
#atributo específico que es una fecha como segundo criterio
#manteniendo el orden:
bisect.insort_left(lista, objeto, key=lambda x: (x.atributo1, x.atributo2.fecha()))
#29. Encontrar el índice donde un elemento debería ser
#insertado en una lista de objetos personalizados
#utilizando la función `lt` del objeto para comparar y
#un atributo específico que es un diccionario como segundo
#criterio:
index = bisect.bisect_left(lista, objeto, key=lambda x: (x.atributo1, x.atributo2['clave']))
#30. Insertar un objeto personalizado en una lista
#ordenada utilizando la función `lt_` del objeto para
#comparar y un atributo específico que es un diccionario
#como segundo criterio manteniendo el orden:
bisect.insort_left(lista, objeto, key=lambda x: (x.atributo1, x.atributo2['clave']))
#31. Insertar un elemento en una lista ordenada:
import bisect
my_list = [1, 3, 5, 7, 9]
bisect.insort(my_list, 4)
print(my_list) # [1, 3, 4, 5, 7, 9]
#32. Encontrar el índice donde se debe insertar un
#elemento en una lista ordenada:
import bisect
my_list = [1, 3, 5, 7, 9]
index = bisect.bisect(my_list, 4)
print(index) # 2
#33. Encontrar el índice donde se debe insertar un
#elemento en una lista ordenada, pero en orden inverso:
import bisect
my_list = [9, 7, 5, 3, 1]
index = bisect.bisect_left(my_list, 4)
print(index) # 2
#34. Encontrar el índice donde se debe insertar un
#elemento en una lista ordenada, pero en orden inverso
#y con un límite superior:
import bisect
my_list = [9, 7, 5, 3, 1]
index = bisect.bisect_left(my_list, 4, 0, 3)
print(index) # 2
#35. Encontrar el índice donde se debe insertar un
#elemento en una lista ordenada, pero en orden inverso
#y con un límite inferior y superior:
import bisect
my_list = [9, 7, 5, 3, 1]
index = bisect.bisect_left(my_list, 4, 1, 3)
print(index) # 2