Python 代码不';t回程浮球

Python 代码不';t回程浮球,python,Python,对于输入([4,5,5,4]),代码返回4.0,它应该返回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: l

对于输入
([4,5,5,4])
,代码返回
4.0
,它应该返回
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])

您正在中使用楼层分割运算符(
/

将其更改为使用
/
,如下所示

med = (frs_index) + lst_index) / float(2.0)
示例:

print 5/2.0    # 2.5
print 5//2.0   # 2.0

您正在使用
/
楼层分区。如果要使用浮点除法,请使用
/

med = (frs_index) + lst_index) / 2.0
无需将
2.0
转换为浮点,它已经是浮点文本

请注意,以下内容将对lis进行适当排序:

srt_list = lis
srt_list.sort()
srt\u 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])
;你不妨把这些环放在这里。当函数在该点退出时,
返回之后的所有内容都不会执行


这适用于所有3个回路;现在还不清楚您试图通过这些循环实现什么。

即使您应该使用
/
而不是
/
,您也永远无法达到您的分区:

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

虽然这是正确的

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
大体上,代码所做的是拆分列表,如果第一个列表的长度相等,则返回第一个元素的浮点表示形式。我相信这不是你想做的

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