Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 不使用排序函数查找中值_Python_Median - Fatal编程技术网

Python 不使用排序函数查找中值

Python 不使用排序函数查找中值,python,median,Python,Median,作为家庭作业,我必须编写一个脚本,在不使用Python标准排序函数的情况下,找到3个给定数字的中值 这是我上课的第一周,也是我的第一次编程经验,所以我发现很难比现在更进一步 以下是我目前掌握的情况: def med3(a,b,c): list = [a, b, c] newlist = [] if list: minimum = list[0] for x in list: if x < minimum:

作为家庭作业,我必须编写一个脚本,在不使用Python标准排序函数的情况下,找到3个给定数字的中值

这是我上课的第一周,也是我的第一次编程经验,所以我发现很难比现在更进一步

以下是我目前掌握的情况:

def med3(a,b,c):
    list = [a, b, c]
    newlist = []
    if list:
        minimum = list[0]
        for x in list:
            if x < minimum:
                minimum = x
                newlist.append(minimum)
                list.remove(minimum)
            elif x >= minimum:
                newlist.append(x)
                list.remove(x)

    return newlist[1]
def med3(a、b、c):
列表=[a、b、c]
新列表=[]
如果列表:
最小值=列表[0]
对于列表中的x:
如果x<最小值:
最小值=x
newlist.append(最小值)
列表。删除(最小值)
elif x>=最小值:
newlist.append(x)
列表。删除(x)
返回新列表[1]
这似乎起到了作用,但只适用于列表的前两个条目。循环不包括第三个条目

如何使脚本包含所有三个条目

提前谢谢!
Sander

在循环列表时,您正在原地修改列表,这会对您看到的元素产生影响:

>>> numbers = [1,2,3]
>>> for i in numbers:
...     if i == 2: numbers.remove(i)
...     print i
... 
1
2
注意
3
是如何从不打印的;通过删除列表中的第二个条目,我们将其缩短了一个元素,循环发现列表很早就用完了


请注意,您不需要对这些项目进行循环,如果您想一想,一些简单的比较将告诉您中间值是什么项目。:-)

当在列表上循环时,您正在原地修改列表,这会对您看到的元素产生影响:

>>> numbers = [1,2,3]
>>> for i in numbers:
...     if i == 2: numbers.remove(i)
...     print i
... 
1
2
注意
3
是如何从不打印的;通过删除列表中的第二个条目,我们将其缩短了一个元素,循环发现列表很早就用完了


请注意,您不需要对这些项目进行循环,如果您想一想,一些简单的比较将告诉您中间值是什么项目。:-)

有许多更简单的方法可以做到这一点,但对于您的方法:

您正在修改循环中的
列表
。不要那样做。:)

在您的情况下,您应该从newlist中删除元素:

def med3(a,b,c):
    list = [a, b, c]
    newlist = []
    if list:
        minimum = list[0]
        for x in list:
            if x < minimum:
                minimum = x
                newlist.pop()
                newlist.append(minimum)
            elif x >= minimum:
                newlist.append(x)
    return newlist[1]
def med3(a、b、c):
列表=[a、b、c]
新列表=[]
如果列表:
最小值=列表[0]
对于列表中的x:
如果x<最小值:
最小值=x
newlist.pop()
newlist.append(最小值)
elif x>=最小值:
newlist.append(x)
返回新列表[1]
但作为练习,您可能需要考虑以下几点:

  • 你为什么要把这些元素放在一个列表中,然后在上面循环?与简单的if语句相比,这有什么优势

  • 如果列表:,为什么选择


有许多简单的方法可以做到这一点,但对于您的方法:

您正在修改循环中的
列表
。不要那样做。:)

在您的情况下,您应该从newlist中删除元素:

def med3(a,b,c):
    list = [a, b, c]
    newlist = []
    if list:
        minimum = list[0]
        for x in list:
            if x < minimum:
                minimum = x
                newlist.pop()
                newlist.append(minimum)
            elif x >= minimum:
                newlist.append(x)
    return newlist[1]
def med3(a、b、c):
列表=[a、b、c]
新列表=[]
如果列表:
最小值=列表[0]
对于列表中的x:
如果x<最小值:
最小值=x
newlist.pop()
newlist.append(最小值)
elif x>=最小值:
newlist.append(x)
返回新列表[1]
但作为练习,您可能需要考虑以下几点:

  • 你为什么要把这些元素放在一个列表中,然后在上面循环?与简单的if语句相比,这有什么优势

  • 如果列表:,为什么选择


  • 总和([a,b,c])-最小值(a,b,c)-最大值(a,b,c)
    -无排序

    求和([a,b,c])-min(a,b,c)-max(a,b,c)
    -无排序

    最快的方法是:

    def medianFast(a, b, c):
        if a > b:
            if b > c: 
                return b
            elif a > c:
                return c
            else:
                return a
        else:
            if b < c: 
                return b
            elif a > c:
                return a
            else:
                return c
    

    最快的方法是:

    def medianFast(a, b, c):
        if a > b:
            if b > c: 
                return b
            elif a > c:
                return c
            else:
                return a
        else:
            if b < c: 
                return b
            elif a > c:
                return a
            else:
                return c
    

    工作太多了。定义“中间值”在3个数字的上下文中的含义,而不使用循环和列表。那里有很多代码是不需要的。另外,因为这是家庭作业,所以由您自己来解决,而不是由我们来为您完成……欢迎使用Stack Overflow!这里有许多不必要的步骤。例如,
    如果列表:
    是不必要的:您刚刚定义了列表。但一般来说,您不需要列表或循环。提示:您可以使用三个
    if
    语句来实现这一点,每个语句都使用
    。我建议您找到一种方法,在您的头脑中找到3个给定数字的中位数。用英语写下这个技巧,就像给别人一个食谱一样。最后,使用编程语言编写此技术的代码。(把你的文本称为伪代码,你就是一个真正的程序员;-)工作太多了。定义“中间值”在3个数字的上下文中的含义,而不使用循环和列表。那里有很多代码是不需要的。另外,因为这是家庭作业,所以由您自己来解决,而不是由我们来为您完成……欢迎使用Stack Overflow!这里有许多不必要的步骤。例如,
    如果列表:
    是不必要的:您刚刚定义了列表。但一般来说,您不需要列表或循环。提示:您可以使用三个
    if
    语句来实现这一点,每个语句都使用
    。我建议您找到一种方法,在您的头脑中找到3个给定数字的中位数。用英语写下这个技巧,就像给别人一个食谱一样。最后,使用编程语言编写此技术的代码。(把你的文本称为伪代码,你就是一个真正的程序员;-)