排序寄存器数组没有默认方法

时间:2015-10-22 03:28:27

标签: python arrays list sorting object

我想创建一个方法,用一个键对带有寄存器的数组进行排序。

我有这个:

class Test:
    pass

def init():
    test = Test()
    test.number= int(input('Enter a number'))
    test.genre = int(input('Enter a number'))
    test.quantity = int(input('Enter a number'))
    return test

def show(ar):
    for i in range(len(ar)):
        print('Number', ar[i].number)

def array_sorted():
    v = [None]*10
    for i in range(0, 10):
        v[i] = init()
        if i != 0:
            if v[i].number < v[i-1].number:
                v[i-1], v[i] = v[i], v[i-1]
    return v

array = array_sorted()
show(array)

OUT:

Number 2798
Number 4036
Number 4164
Number 6613
Number 9176
Number 1891
Number 9395
Number 252
Number 6255
Number 9505

在&#34; OUT&#34;我使用&#34; random.randint&#34;生成对象。方法作为一个例子,但你可以看到数字没有排序。我想创建一个以Test()对象为元素的数组。但每当我在其中收取一个新的寄存器时,该数组按字段&#34; number&#34;进行排序。我无法使用任何默认方法,例如&#34; sort()&#34;方法

2 个答案:

答案 0 :(得分:2)

此循环只允许新条目与

之前的条目交换
for i in range(0, 10):
    v[i] = init()
    if i != 0:
        if v[i].number < v[i-1].number:
            v[i-1], v[i] = v[i], v[i-1]

您需要将每个v[i]与每个v[0] - v[i-1]进行比较,以找出它适合的位置。

这意味着您需要在

中嵌套另一个循环

答案 1 :(得分:0)

# sort the list in place
li.sort(key=lambda x: x.genre)
# return a new list
newLi = sorted(li, key=lambda x: x.genre)