Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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 排序功能不支持';t排序,并复制一些输入_Python_List_Sorting - Fatal编程技术网

Python 排序功能不支持';t排序,并复制一些输入

Python 排序功能不支持';t排序,并复制一些输入,python,list,sorting,Python,List,Sorting,我正在为我的Python类开发一个排序函数。以下是我目前得到的信息: 编辑:我不能使用Python的任何内置排序函数 def main(): my_list = [] my_input = input("Input a number >>> ") my_list.append(float(my_input)) while my_input != "stop": for i in range(0, len(my_list)):

我正在为我的Python类开发一个排序函数。以下是我目前得到的信息:

编辑:我不能使用Python的任何内置排序函数

def main():

    my_list = []
    my_input = input("Input a number >>> ")
    my_list.append(float(my_input))

    while my_input != "stop":
        for i in range(0, len(my_list)):
            if float(my_input) < my_list[i]:
                my_list[i - 1] = float(my_input)
                break
        my_list.append(float(my_input))

        my_input = input("Input a number >>> ")

    print(my_list)

if __name__ == "__main__":
    main()
def main():
我的清单=[]
我的输入=输入(“输入一个数字>>”)
my_list.append(float(my_输入))
而我的_输入!=“停止”:
对于范围(0,len(我的列表))中的i:
如果浮点(my_输入)>”)
打印(我的列表)
如果名称=“\uuuuu main\uuuuuuuu”:
main()
现在很晚了,我有两个小时的时间交上来。我筋疲力尽,我觉得我错过了一些相对简单的东西

我假设用户输入的第一个值不是“stop”,它将停止函数。或者应该,无论如何

因此,我将第一个值添加到列表中,以便传入的新值可以进行比较

当用户输入为1、9、2、8、3、7、4时,这会将输出更改为:

7,8,9,2,8,3,4,4

里面有一个重复的4,而且没有排序

我试图做的是将用户的输入与列表的第一个值进行比较。如果较小,则将其添加到列表之前的位置。如果不是,请移动到列表中的下一个值并再次测试。如果它不小于列表中的任何值,只需附加它即可

然而,这似乎不起作用。或者我只是做错了


谢谢你的帮助

我想你需要的是

while my_input != "stop":
    for i in range(0, len(my_list)):
        if float(my_input) < my_list[i]:
            my_list[i - 1] = float(my_input)
            break
    else: # no break encountered
        my_list.append(float(my_input)) 
当我输入时!=“停止”:
对于范围(0,len(我的列表))中的i:
如果浮点(my_输入)
但是,当有许多好的实现可以查询时,尝试实现自己的排序似乎很愚蠢


要在位置0(即prepend)插入列表,您只需
my\u list.insert(0,value)
您的代码中只有两个错误,请注意,我们将列表索引更改为使用.insert()函数调用,并在for循环的末尾添加了一个else:

def main():
    my_list = []
    my_input = raw_input("Input a number >>> ")
    my_list.append(float(my_input))
    while my_input != "stop":
        for i in range(0, len(my_list)):
            if float(my_input) < my_list[i]:
                my_list.insert(i, float(my_input))  ### -- first change
                break
        else:                                       ### -- second change
            my_list.append(float(my_input))
        my_input = raw_input("Input a number >>> ")
    print my_list
这里有差不多相同的东西被分解成两个函数

def my_sort(a, b):
    for num in a:
        for i, val in enumerate(b[:]):
            if num > val:
                b.insert(i, num)
                break
        else:
            b.append(num)
    return b

def main():
    my_list = []
    while True:
        try:
            my_input = raw_input("Input a number >>> ")
            if "stop" == my_input:
                break
            my_input = float(my_input)
            my_list = my_sort([my_input], my_list[:])
        except ValueError:
            pass
    print my_list
样本输入

>>> main()
Input a number >>> 4
Input a number >>> 5
Input a number >>> 6
Input a number >>> 1
Input a number >>> 2
Input a number >>> 3
Input a number >>> stop
[6.0, 5.0, 4.0, 3.0, 2.0, 1.0]

my_list[i-1]
不在列表前面,它将替换该索引处的值。在执行此行之前,我的列表[i-1]
中的值会发生什么变化?对不起。我的帖子澄清了一点。我不需要附加它。如果它发现用户输入的数字小于它当前在列表中查看的数字,则会将该数字添加到该数字之前。您只有两行需要更改,请参阅下面的我的答案。我试过了,但似乎不太管用。另外,为什么else与for循环位于同一缩进中?这不应该是“如果”语句吗?因为这是一项家庭作业,我强烈建议不要使用
for…else
,因为你的老师很可能知道你作弊了。没有其他人属于for。。。但我支持@OozeMeister的评论。。。很难说问题出在哪里。。。但是你可以很容易地实现冒泡排序,或者用另一个解决你第二个问题的答案:P
>>> main()
Input a number >>> 4
Input a number >>> 5
Input a number >>> 6
Input a number >>> 1
Input a number >>> 2
Input a number >>> 3
Input a number >>> stop
[6.0, 5.0, 4.0, 3.0, 2.0, 1.0]