Страницы

Поиск по вопросам

суббота, 28 декабря 2019 г.

Есть число в списке и нужно вывести соседние от него числа (слева и справа)

#python #алгоритм #python_3x #python_35


Есть список из чисел, я нашел в нем число с максимальным значением и хочу вывести
соседние от него числа. Одно слева и одно справа. Не знаю, как их обозначить. 

def A(linst) :   
    v_max = max(linst)
    z = [x for x in enumerate(linst)]     
    for i in z :
        if v_max in i and                 # finish 

    


Ответы

Ответ 1



Если макс число 0 индекс, то слева от него будет считаться последнее число списка, тоже самое и для если макс число последнее в списке: def foo(numbers: list) -> tuple: max_num = max(numbers) index_max_num = numbers.index(max_num) left_index = index_max_num - 1 # Индекс последнего элемента if left_index < 0: left_index = len(numbers) - 1 right_index = index_max_num + 1 # Индекс первого элемента if right_index >= len(numbers): right_index = 0 return numbers[left_index], max_num, numbers[right_index] print(foo([3, 6, -2, -6, 8, 3])) # (-6, 8, 3) print(foo([1, 2, 3, 4, 5])) # (4, 5, 1) print(foo([1, 3, 5, 9, 2])) # (5, 9, 2) print(foo([5, 3, 1, 4, 2])) # (2, 5, 3)

Ответ 2



Решение с использованием Numpy модуля: import numpy as np In [127]: a = np.array([1, 2, 3, 4, 5]) In [128]: ix_max = a.argmax() In [129]: a[[(ix_max-1) % len(a), ix_max, (ix_max+1) % len(a)]] Out[129]: array([4, 5, 1])

Ответ 3



Первое что пришло в голову: def foo(array): if array[array.index(max(array))] == array[-1]: return (array[array.index(max(array))-1], array[0]) return (array[array.index(max(array))-1], array[array.index(max(array))+1]) print(foo([15, 11, 20])) # (11, 15) print(foo([5, 4, 2])) # (2, 4) print(foo([1, 5, 3])) # (1, 3) Вообще это лямбдой можно сделать: foo = lambda array: (array[array.index(max(array))-1], array[0]) if array[array.index(max(array))] == array[-1] else (array[array.index(max(array))-1], array[array.index(max(array))+1])

Ответ 4



Чтобы напечатать через пробел наибольший элемент и его соседей слева и справа в списке L: i = max(range(len(L)), key=L.__getitem__) index_left = i - 1 index_right = (i + 1) % len(L) print(L[index_left], L[index_right]) # -> -6 3 Код предполагает, что список циклический: слева от первого элемента находится последний справа от последнего элемента находится первый Также индекс -1 интерпретируется как len(L) - 1 (как обычно для стандартных последовательностей).

Ответ 5



def get(linst, prev_n=None): ilst, v_max = iter(linst), max(linst) for n in ilst: if n == v_max: try: next_n = next(ilst) except StopIteration: next_n = None return prev_n, n, next_n else: prev_n = n print(get([1, 2, 9, 4, 5])) # (2, 9, 4) print(get([9, 2, 3, 4, 5])) # (None, 9, 2) print(get([1, 2, 3, 4, 9])) # (4, 9, None)

Комментариев нет:

Отправить комментарий