Найти - Пользователи
Полная версия: вывести индексы элементов из сортированного списка
Начало » Центр помощи » вывести индексы элементов из сортированного списка
1
ivanu6ka85
всем доброго времени суток!
вот такая задача:
Написать программу:на вход подается последовательность чисел через пробел, а также запрашивается у пользователя любое число.
Далее программа работает по следующему алгоритму:
Преобразование введённой последовательности в список
Сортировка списка по возрастанию элементов в нем (для реализации сортировки определите функцию)
Устанавливается номер позиции элемента, который меньше введенного пользователем числа, а следующий за ним больше или равен этому числу.
ПОЛУЧИЛОСЬ: ввод чисел осуществляется, ввод от пользователя также осуществляется. Далее преобразую полученные числа в список с добавлением числа от пользователя, далее сортирую этот список по возрастанию.
ЧТО НЕ ПОЛУЧИЛОСЬ: при поиске индекса введенного и добавленного в список элемента, выдаёт индекс последнего числа(как будто при добавлении в список), но список уже отсортирован и индекс не верный.
А по заданию задачи нужно найти соседние индексы относительно введенного числа и добавленного в список.

вот код:


def binary_search(num, element, left, right):
if left > right: # если левая граница превысила правую,
return False
middle = (right + left) // 2 # находим середину
if num == element: # если элемент в середине,
return middle # возвращаем этот индекс
elif element < num: # если элемент меньше элемента в середине
# рекурсивно ищем в левой половине
return binary_search(num, element, left, middle - 1)
else: # иначе в правой
return binary_search(num, element, middle + 1, right)

num = list(map(int, input(“Введите целые числа через пробел:”).split()))
element = int(input(“Введите любое целое число : ”))
num.append(element)
print(sorted(num))


index = num.index(element)
#element_index = binary_search(num, element, 0, len(num))
print('Индекс введенного элемента:', element, ‘в списке равен:’, index)
#print(element_index)



py.user.next
Не надо добавлять число в список, а надо просто найти в списке позиции, где стоят два элемента и первый элемент меньше введённого числа, а второй элемент больше или равен введённому числу. Если такой позиции нет, вернуть -1 или 0 в зависимости от того, с какого числа начинается отсчёт позиций. Слово “номер”, которое есть в задании, обычно говорит о натуральных числах, а они в нашей математике начинаются с единицы, так как использовались для нумерации предметов, которые существуют. В международной математике ноль включают в натуральные числа, поэтому там всегда идёт оговорка, входит ноль или не входит. Следовательно, раз нуля в номерах не бывает, то его можно использовать в качестве понятия “номер позиции не найден, так как такой позиции в списке нет”.

Когда такой позиции нет? Когда ты ввёл одни единицы, а число ввёл миллион. И когда ты ввёл одни пятёрки, а число ввёл единицу.

Ещё есть случай, когда таких позиций несколько и с этим нужно что-то делать. Но обычно берётся самая первая слева направо.
ivanu6ka85
py.user.next
Не надо добавлять число в список, а надо просто найти в списке позиции, где стоят два элемента и первый элемент меньше введённого числа, а второй элемент больше или равен введённому числу. Если такой позиции нет, вернуть -1 или 0 в зависимости от того, с какого числа начинается отсчёт позиций. Слово “номер”, которое есть в задании, обычно говорит о натуральных числах, а они в нашей математике начинаются с единицы, так как использовались для нумерации предметов, которые существуют. В международной математике ноль включают в натуральные числа, поэтому там всегда идёт оговорка, входит ноль или не входит. Следовательно, раз нуля в номерах не бывает, то его можно использовать в качестве понятия “номер позиции не найден, так как такой позиции в списке нет”.Когда такой позиции нет? Когда ты ввёл одни единицы, а число ввёл миллион. И когда ты ввёл одни пятёрки, а число ввёл единицу.Ещё есть случай, когда таких позиций несколько и с этим нужно что-то делать. Но обычно берётся самая первая слева направо.
Подскажите как это кодом записать, никак не пойму, с помощью цикла?
py.user.next
  
>>> def lst_sort(lst):
...     return sorted(lst)
... 
>>> def lst_find_num(lst, num):
...     for i in range(len(lst) - 1):
...         if num > lst[i] and num <= lst[i + 1]:
...             return i + 1
...     return -1
... 
>>> def f():
...     seq = list(map(int, input('Input sequence: ').split()))
...     num = int(input('Input number: '))
...     seq_sorted = lst_sort(seq)
...     position = lst_find_num(seq_sorted, num)
...     print('Sequence', *seq)
...     print('Number', num)
...     print('Sequence Sorted', *seq_sorted)
...     print('Position in sorted sequence', *seq_sorted,
...           'for number', num,
...           'is', position)
... 
>>> f()
Input sequence: 5 4 3 2 1
Input number: 3
Sequence 5 4 3 2 1
Number 3
Sequence Sorted 1 2 3 4 5
Position in sorted sequence 1 2 3 4 5 for number 3 is 2
>>> 
>>> f()
Input sequence: 5 4 3 2 1
Input number: 6
Sequence 5 4 3 2 1
Number 6
Sequence Sorted 1 2 3 4 5
Position in sorted sequence 1 2 3 4 5 for number 6 is -1
>>> 
>>> f()
Input sequence: 5 4 3 2 1
Input number: 0
Sequence 5 4 3 2 1
Number 0
Sequence Sorted 1 2 3 4 5
Position in sorted sequence 1 2 3 4 5 for number 0 is -1
>>>
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB