如何找到python列表的确切中间位置?
aList = [1,2,3,4,5]
middle = findMiddle(aList)
print middle
这只是一个能够找到任何列表中间的函数示例,这是否可以使用列表推导来完成?
编辑:这与取出中间点不同,因为我想打印中间值,如果列表是奇数,我想返回中间值,如接受的答案。没有像其他问题那样得到中位数并且得到两个值的平均值。
答案 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]