Ответ 1
Подсказка 1. Вы можете изучить код Python в bisect module.
Подсказка 2: Slicing можно использовать для вставки списка:
>>> s = ['a', 'b', 'd', 'e']
>>> s[2:2] = ['c']
>>> s
['a', 'b', 'c', 'd', 'e']
Я создаю класс, в котором один из методов вставляет новый элемент в отсортированный список. Элемент вставлен в скорректированное (отсортированное) положение в отсортированном списке. Мне не разрешено использовать какие-либо встроенные функции списка или методы, отличные от []
, [:]
, +
и len
. Это та часть, которая меня действительно сбивает с толку.
Что было бы лучше всего в этом?
Подсказка 1. Вы можете изучить код Python в bisect module.
Подсказка 2: Slicing можно использовать для вставки списка:
>>> s = ['a', 'b', 'd', 'e']
>>> s[2:2] = ['c']
>>> s
['a', 'b', 'c', 'd', 'e']
Используйте insort функцию bisect:
>> import bisect
>> a = [1, 2, 4, 5]
>> bisect.insort(a, 3)
>> print(a)
[1, 2, 3, 4, 5]
Вы должны использовать модуль bisect. Кроме того, список необходимо отсортировать перед использованием bisect.insort_left
Это довольно большая разница.
>>> 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
Это возможное решение для вас:
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]
Это лучший способ добавить список и вставить значения в отсортированный список:
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)`