查找列表中间

时间:2016-06-30 18:39:17

标签: python

如何找到python列表的确切中间位置?

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

这只是一个能够找到任何列表中间的函数示例,这是否可以使用列表推导来完成?

编辑:这与取出中间点不同,因为我想打印中间值,如果列表是奇数,我想返回中间值,如接受的答案。没有像其他问题那样得到中位数并且得到两个值的平均值。

4 个答案:

答案 0 :(得分:8)

这样的事情可以做到:

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]

答案 1 :(得分:1)

取出列表的长度,将其缩小一半,并访问该索引点的列表。

答案 2 :(得分:1)

为什么要使用列表理解?列表理解只能一次知道列表中的任何一个成员,因此这将是一种奇怪的方法。代替:

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的{​​{1}}个数字的数组,其中i是一个范围的成员,从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中提取的索引,请记住哪些参数是python中lis函数的包含/排除。

如果你知道它每次都是一个奇怪的长度列表,你可以在range()到达那里以获得实际的单个值(而不是包含单个值的数组),但是如果它可以或将是一个偶数长度列表,并且您希望返回包含两个中间值的数组或单个值的数组,保持原样。 :)

答案 3 :(得分:0)

你期待像

这样的东西
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]