代码为输入4.0
返回([4 ,5 ,5 ,4])
,它应返回4.5
并将4/5
分开。
我怎样才能解决这个问题?
编辑:我试图找到列表的中位数。
def median(lis):
srt_list = lis
srt_list.sort()
new_lis = srt_list[0:len(lis)//2]
new_lis_last = srt_list[len(lis)//2:]
if len(srt_list) % 2 == 0:
lst_index = new_lis[len(new_lis)-1]
frs_index = new_lis_last[0]
med = (frs_index + lst_index) / 2.0
print med
else:
frs_index = new_lis_last[0]
print median([7,3,1,4])
答案 0 :(得分:4)
您在
中使用了分区运算符(//
)
med = (frs_index) + lst_index) // float(2.0)
将其更改为使用/
,就像这样
med = (frs_index) + lst_index) / float(2.0)
示例:强>
print 5/2.0 # 2.5
print 5//2.0 # 2.0
答案 1 :(得分:4)
即使你应该使用/
而不是//
,你也永远不会使用你的división:
med = (frs_index) + lst_index) // float(2.0)
因为你的2 for循环里面有一个return语句:
for i in range(len(new_lis)):
lst_index = new_lis[len(new_lis)-1]
return float(lst_index) # If arriving here, you function return new_lis[len(new_lis)-1] and finish
break
for i in range(len(new_lis_last)):
frs_index = new_lis_last[0]
return float(frs_index) # If arriving here, you function return new_lis_last[0] and finish
break
答案 2 :(得分:2)
您正在使用//
分区。如果您想使用 float 部门,请使用/
:
med = (frs_index) + lst_index) / 2.0
无需将2.0
转换为浮点数,已经是浮点字面值。
请注意,以下内容将对lis
进行排序:
srt_list = lis
srt_list.sort()
srt_list
是对同一列表对象的另一个引用,不是副本。
代码:
for i in range(len(new_lis)):
lst_index = new_lis[len(new_lis)-1]
return float(lst_index)
break
忽略列表索引,因为它只返回float(new_lis[-1])
;你可以在这里放下循环。 return
之后的所有内容都不会被执行,因为此时退出了该函数。
这适用于所有3个循环;目前尚不清楚你想用这些循环实现什么目的。
答案 3 :(得分:1)
虽然在
中是正确的med = (frs_index) + lst_index) // float(2.0)
您应该//
替换/
,这不是4.0
而不是4.5
编写代码的方式,大多数逻辑都没有被执行。
if len(srt_list) % 2 == 0:
#print "even"
for i in range(len(new_lis)):
lst_index = new_lis[len(new_lis)-1]
return float(lst_index) #This is hit and returns
break
大致上你的代码所做的是拆分列表,如果第一个列表甚至被加长,则返回第一个元素的浮点表示。我确信这不是你想要做的。