Python 不使用排序函数查找中值
作为家庭作业,我必须编写一个脚本,在不使用Python标准排序函数的情况下,找到3个给定数字的中值 这是我上课的第一周,也是我的第一次编程经验,所以我发现很难比现在更进一步 以下是我目前掌握的情况: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:
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个给定数字的中位数。用英语写下这个技巧,就像给别人一个食谱一样。最后,使用编程语言编写此技术的代码。(把你的文本称为伪代码,你就是一个真正的程序员;-)