合并的对象和列表排序

时间:2015-11-29 14:23:40

标签: python-2.7

我有一个鸭子类,这样创建的每个Duck对象都包含翼展和权重字段变量。对于每只鸭子,应该随机初始化每一个。应将翼展初始化为[80.0,100.0] cm范围内的随机浮动。重量应在[0.7,1.6] kg范围内随机初始化。我有

import random
class Duck:
    def __init__(self):
        self.wingspan = round(random.uniform(80.0, 100.0), 1)
        self.weight = round(random.uniform(0.7,1.6), 2)

第二部分要求我编写一个名为makeFlock()的函数,它接受一个整数参数n,并返回n个Duck对象的列表。

def makeFlock(n):
    flock = []
    for _ in range(n):
        flock.append(Duck())
    return(flock)

最后,我需要编写一个名为sortDucks()的函数,该函数将Duck对象列表作为参数,并根据ducks翼展返回按升序排序的列表。给出的提示是使用合并排序算法,但我不太清楚如何做到这一点。谁能解释一下? *不能使用任何内置功能

1 个答案:

答案 0 :(得分:1)

这应该有效:

首先,为简单起见,我将makeFlock更改为List comprehensions。

其次,我使用sorted函数进行排序 - 您可以阅读更多here

import random
class Duck:
    def __init__(self):
        self.wingspan = round(random.uniform(80.0, 100.0), 1)
        self.weight = round(random.uniform(0.7,1.6), 2)

def makeFlock(n):
    return [Duck() for _ in range(n)]

def sortDucks(ducks):
    return sorted(ducks, key=lambda duck: duck.weight) 

flock = makeFlock(5)
sorted_flock = sortDucks(flock)

for duck in sorted_flock:
    print duck.weight

如果你不能使用sorted功能,我很快就写了这个。如果您要我解释,请告诉我。

def sortDucks(ducks):
    # list with the first duck inside
    sorted_ducks = [ducks[0]]
    for d in range(1, len(ducks)):
        # place the second duck into pos 0
        sorted_ducks.insert(0, ducks[d])
        # Loop over the sorted_ducks list and place the duck where the next duck has a larger weight
        for s in range(1, len(sorted_ducks)):
            if ducks[d].weight < sorted_ducks[s].weight:
                break
            else:
                sorted_ducks.pop(s-1)
                sorted_ducks.insert(s, ducks[d])
    return sorted_ducks