Найти середину списка
Как мне найти точную середину списка питонов?
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)]
читать как:
"Вернуть массив, содержащий i
th цифра (ы) массива 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]