Python 使用最小值对列表进行排序

Python 使用最小值对列表进行排序,python,list,tuples,Python,List,Tuples,这就是我所做的,但它不起作用: def min_sorted(xs): copy_list= xs list=[] while copy_list: minimum=copy_list[0] for i in copy_list: if i < minimum: minimum = i if not i == minimum:

这就是我所做的,但它不起作用:

def min_sorted(xs):
    copy_list= xs
    list=[]
    while copy_list:
        minimum=copy_list[0]
        for i in copy_list:
            if i < minimum:
                minimum = i
            if not i == minimum:    
                list.append(minimum)
    print (list)

由于您希望按最小值排序,因此最好使用专门为此作业设计的内置方法,而不是您自己的自定义版本:

xs = [7, 8, 3, 1, 5]

def sort_list(lst):
    return sorted(lst)

print sort_list(xs)
这将产生:

[1, 3, 5, 7, 8]
这样,您的原始列表也将保持不变

注:

根据@Ramchandra Apte:

注意,sorted()在Python3中返回一个迭代器,因此如果您迭代 在该迭代器上,它将完成,并且不能再生成任何值 由迭代器生成。因此,您可能希望传递 已排序()到列表()

实际上,您可以:

xs = [7, 8, 3, 1, 5]
sorted_mintomax = sorted(xs)
def最小排序(xs):
oxs=[]
txs=列表(xs)
而txs:
midx=0
对于枚举中的i,x(txs[1:]):
如果x
根据您的问题历史记录,这看起来像是一个家庭作业问题。我假设您不允许使用jrd1建议的排序后的
sorted
。如果可以,一定要使用
排序


听起来像是您想要的。

bubblesort将最小值推到前面,同时在内部循环中向后遍历列表,在外部循环中向前迭代

def min_sorted(xs):
    xsort = []
    for x in xs:
        xsort.append(x)
    i = 0
    while i < len(xsort)-1:
        for j in range(len(xsort)-1, i, -1):
            if xsort[j] < xsort[j-1]:
                y = xsort[j-1]
                xsort[j-1] = xsort[j]
                xsort[j] = y
        i = i + 1
    return xsort
xs = [7,8,3,1,5]
sorted = min_sorted(xs)
print(xs)
print(sorted)

这是一个用C实现的解决方案,使用名为按最小值排序的模式。这是一个相当复杂、难以理解的问题,但让我们试一试吧

 // 9.  SORTING BY MINIMUM VALUES

#include <stdio.h>

#define NUMBER 25   //SIZE OF THE ARRAY

int main() {
    int array[] = {56, 32, 45, 67, 723, 9, 7, 12, 545, 45, 1, 76, 345, 311, 6, 734, 87, 456, 325, 786, 34, 6, 5, 987, 3};

    for (int i = 0; i < NUMBER - 1; ++i) {

        int index = i;
        int value = array[i];

        for (int j = i + 1; j < NUMBER; ++j) {
            if (value > array[j]) {
                value = array[j];
                index = j;
            }
        }
        array[index] = array[i];
        array[i] = value;
    }

    for (int k = 0; k < NUMBER; k++) {
        printf("%d ", array[k]);
    }

    return 0;
}
/9。按最小值排序
#包括
#定义数字25//数组的大小
int main(){
int数组[]={56,32,45,67,723,9,7,12,545,45,1,76,345,311,6734,456325786,34,6,5987,3};
对于(int i=0;i数组[j]){
值=数组[j];
指数=j;
}
}
数组[索引]=数组[i];
数组[i]=值;
}
for(int k=0;k
您是否正在尝试使用特定的算法?此代码有很多问题。上面的代码是灾难!请注意,
sorted()
在Python3中返回一个迭代器,因此,如果在该迭代器上进行迭代,它将完成,并且不能从迭代器生成更多的值。因此,您可能希望将
sorted()
的输出传递给
list()
@RamchandraApte:Noted。看起来他正在尝试实现一种特定的排序算法,我想这是classicol“选择排序”的一种变体,用于家庭作业…:)@dbra:鉴于问题及其标题中所述信息的缺乏,我假设OP希望能够对列表进行排序,因为他/她没有说明如何或出于什么原因(耸耸肩)。你可能是对的。不过,感谢您的反馈。:。。。当然,在standard list.sort函数中实现的Timsort算法要快得多,但我想您需要实现这个选择排序的变体作为练习。
def min_sorted(xs):
    xsort = []
    for x in xs:
        xsort.append(x)
    i = 0
    while i < len(xsort)-1:
        for j in range(len(xsort)-1, i, -1):
            if xsort[j] < xsort[j-1]:
                y = xsort[j-1]
                xsort[j-1] = xsort[j]
                xsort[j] = y
        i = i + 1
    return xsort
xs = [7,8,3,1,5]
sorted = min_sorted(xs)
print(xs)
print(sorted)
[7, 8, 3, 1, 5, 9]
[1, 3, 5, 7, 8, 9]
 // 9.  SORTING BY MINIMUM VALUES

#include <stdio.h>

#define NUMBER 25   //SIZE OF THE ARRAY

int main() {
    int array[] = {56, 32, 45, 67, 723, 9, 7, 12, 545, 45, 1, 76, 345, 311, 6, 734, 87, 456, 325, 786, 34, 6, 5, 987, 3};

    for (int i = 0; i < NUMBER - 1; ++i) {

        int index = i;
        int value = array[i];

        for (int j = i + 1; j < NUMBER; ++j) {
            if (value > array[j]) {
                value = array[j];
                index = j;
            }
        }
        array[index] = array[i];
        array[i] = value;
    }

    for (int k = 0; k < NUMBER; k++) {
        printf("%d ", array[k]);
    }

    return 0;
}