Найти середину списка

Как мне найти точную середину списка питонов?

aList = [1,2,3,4,5]
middle = findMiddle(aList)
print middle

Это всего лишь пример функции, которая сможет найти середину любого списка. Это то, что вы можете сделать, используя понимание списка?

Изменить: это отличается от удаления средней точки, потому что я хотел бы просто распечатать среднее значение, если список нечетный, я хотел бы вернуть оба средних значения, как принятый ответ. Не получить медиану, как задал другой вопрос, и получить среднее из двух значений.

4 ответа

Решение

Зачем вам использовать понимание списка? Понимание списка знает только о любом члене списка за раз, так что это был бы странный подход. Вместо:

def findMiddle(input_list):
    middle = float(len(input_list))/2
    if middle % 2 != 0:
        return input_list[int(middle - .5)]
    else:
        return (input_list[int(middle)], input_list[int(middle-1)])

Этот должен возвращать средний элемент в списке, если это список нечетных чисел, или кортеж, содержащий два средних элемента, если это список с четным номером.

Редактировать:

Подумайте еще о том, как можно сделать это с помощью понимания списка, просто для удовольствия. Придумали это:

[lis[i] for i in 
    range((len(lis)/2) - (1 if float(len(lis)) % 2 == 0 else 0), len(lis)/2+1)]

читать как:

"Вернуть массив, содержащий ith цифра (ы) массива lisгде я есть / являются членами диапазона, который начинается в the length of lis, divided by 2, from which we then subtract either 1 if the length of the list is even, or 0 if it is oddи который заканчивается в the length of lis, divided by 2, to which we add 1".

Начало / конец диапазона соответствуют индексу (ам), из которых мы хотим извлечь lisучитывая, какие аргументы являются включающими / исключающими из range() функция в питоне.

Если вы знаете, что каждый раз это будет нечетный список длины, вы можете [0] до конца, чтобы получить фактическое единственное значение (вместо массива, содержащего единственное значение), но если это может или будет список четной длины, и вы хотите вернуть массив, содержащий два средних значения ИЛИ массив из одно значение, оставить как есть.:)

Что-то вроде этого сделало бы:

aList = [1,2,3,4,5]
#minus 1 because the first element is index 0
middleIndex = (len(aList) - 1)/2
print middleIndex
print aList[middleIndex]

Возьмите длину списка, сократите ее пополам и получите доступ ко всему списку в этой точке индекса.

Вы ожидаете что-то вроде

def findMiddle(list):
  l = len(list)
  if l/2:
    return (list[l/2-1]+list[l/2])/2.0
  else:
    return list[(l/2-1)/2]
Другие вопросы по тегам