sacar - Inserta un elemento en la lista ordenada en Python
llenar una lista en python (5)
Estoy creando una clase donde uno de los métodos inserta un nuevo elemento en la lista ordenada. El artículo se inserta en la posición corregida (clasificada) en la lista ordenada. No tengo permitido usar ninguna función de lista incorporada o métodos que no sean []
, [:]
, +
y len
. Esta es la parte que es realmente confusa para mí.
¿Cuál sería la mejor manera de hacerlo?
Deberías usar el módulo bisect. Además, la lista debe ordenarse antes de usar bisect.insort_left
Es una gran diferencia.
>>> l = [0, 2, 4, 5, 9]
>>> bisect.insort_left(l,8)
>>> l
[0, 2, 4, 5, 8, 9]
timeit.timeit("l.append(8); l = sorted(l)",setup="l = [4,2,0,9,5]; import bisect; l = sorted(l)",number=10000)
1.2235019207000732
timeit.timeit("bisect.insort_left(l,8)",setup="l = [4,2,0,9,5]; import bisect; l=sorted(l)",number=10000)
0.041441917419433594
Esta es la mejor manera de agregar la lista e insertar valores en la lista ordenada:
a = [] num = int(input(''How many numbers: '')) for n in range(num):
numbers = int(input(''Enter values:''))
a.append(numbers)
b = sorted(a) print(b) c = int(input("enter value:")) for i in
range(len(b)):
if b[i] > c:
index = i
break d = b[:i] + [c] + b[i:] print(d)`
Esta es una posible solución para usted:
a = [15, 12, 10]
b = sorted(a)
print b # --> b = [10, 12, 15]
c = 13
for i in range(len(b)):
if b[i] > c:
index = i
break
d = b[:i] + [c] + b[i:]
print d # --> d = [10, 12, 13, 15]
Sugerencia 1: es posible que desee estudiar el código Python en el módulo bisect .
Sugerencia 2: El Slicing se puede utilizar para la inserción de la lista:
>>> s = [''a'', ''b'', ''d'', ''e'']
>>> s[2:2] = [''c'']
>>> s
[''a'', ''b'', ''c'', ''d'', ''e'']