Python对结构体/类进行排序(根据机构体中的某个数据)

我有一个list容器,其中存放的是结构体数据,数据格式如下

class TestID:
    def __int__(self):
        self.id = -1
        self.similary = 0.0

排序的格式:相似度从大到小,ID号从大到小

意思是:当相似度相同时,ID号再进行排序

那么,我的初始化数据如下所示,仅做参考样本数据

arr_list = []

st = TestID()
st.id = 10
st.similary = 0.88
arr_list.append(st)

st = TestID()
st.id = 8
st.similary = 0.78
arr_list.append(st)

st = TestID()
st.id = 9
st.similary = 0.88
arr_list.append(st)

st = TestID()
st.id = 1
st.similary = 0.5
arr_list.append(st)

st = TestID()
st.id = 2
st.similary = 1
arr_list.append(st)

我列举的结构体中有两个相似度相同(0.88),ID不同的数据

排序方法:

def __sortTestSTGroup(self , testST ):
    length = len(testST )
    for i in range(1, length):
        x = testST [i]
        x_similary = testST [i].similarity
        x_id = testST [i].id
        for j in range(i, -1, -1):
            # j为当前位置,试探j-1位置
            temp_id = testST [j - 1].id
            temp_similary = testST [j - 1].similarity
            if x_similary == temp_similary:
                if x_id < temp_id:
                    testST [j] = testST [j - 1]
                else:
                    break
            elif x_similary > temp_similary:
                testST [j] = testST [j - 1]
            else:
                # 位置确定为j
                break
        testST [j] = x
        # for item in testST :
        #     str_los = '改变后的内容:id=%s,similarity=%f' % (x.id, x.similarity)
        #     print(str_los)

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 可以使用Python的`sorted()`函数和`operator`模块中的`attrgetter()`函数来实现按照结构体根节点排序输出数据。下面是一个示例代码: 假设我们有两个结构体`Person`和`Car`,分别表示人和车辆信息: ```python from operator import attrgetter class Person: def __init__(self, name, age): self.name = name self.age = age class Car: def __init__(self, brand, model, owner): self.brand = brand self.model = model self.owner = owner ``` 现在我们有多个人和多辆车的信息,可以将它们存储在列表中: ```python people = [Person("Tom", 20), Person("Mike", 25), Person("Alice", 18)] cars = [Car("Toyota", "Camry", people[0]), Car("Honda", "Civic", people[1]), Car("BMW", "X5", people[2])] ``` 要按照人的年龄排序输出所有人和他们所拥有的车辆信息,可以使用以下代码: ```python sorted_people = sorted(people, key=attrgetter("age")) for person in sorted_people: print("Name: {}, Age: {}".format(person.name, person.age)) sorted_cars = sorted([car for car in cars if car.owner == person], key=attrgetter("brand")) for car in sorted_cars: print(" Brand: {}, Model: {}".format(car.brand, car.model)) ``` 输出结果如下: ``` Name: Alice, Age: 18 Brand: BMW, Model: X5 Name: Tom, Age: 20 Brand: Toyota, Model: Camry Name: Mike, Age: 25 Brand: Honda, Model: Civic ``` 可以看到,输出结果按照人的年龄从小到大排序,并且每个人所拥有的车辆信息按照品牌从小到大排序。 ### 回答2: 首先要明确问题,即对于多个结构体按照结构体的根节点进行排序,并且输出排序后的数据。方法如下: 1. 创建多个结构体并赋值。首先,我们需要定义一个结构体,包含根节点和其他成员变量。然后,根据需要创建多个结构体,并给它们赋值。 2. 对结构体进行排序。我们可以使用Python排序函数,例如sorted()函数,根据结构体的根节点对结构体进行排序。可以定义一个lambda函数作为排序的关键字。 3. 输出排序后的数据排序后,我们可以使用循环来遍历结构体,并输出结构体数据。 下面是一个示例代码: ```python # 定义结构体 class Structure: def __init__(self, root, data): self.root = root self.data = data # 创建结构体并赋值 structure1 = Structure(3, "data1") structure2 = Structure(1, "data2") structure3 = Structure(2, "data3") # 对结构体进行排序 structures = [structure1, structure2, structure3] sorted_structures = sorted(structures, key=lambda x: x.root) # 输出排序后的数据 for s in sorted_structures: print("Root:", s.root, "Data:", s.data) ``` 输出结果为: ``` Root: 1 Data: data2 Root: 2 Data: data3 Root: 3 Data: data1 ``` 这样,我们就能够实现多个结构体同时按照根节点排序并输出排序后的数据。 ### 回答3: 使用Python,可以通过定义多个结构体,并根据结构体的根结点进行排序来实现按结构体输出数据的同时根据结构体根结点排序的功能。 首先,我们可以使用`class`关键字定义多个结构体,每个结构体代表一个结构体。在每个结构体中,可以定义多个属性,代表结构体中的各个字段。例如,假设有两个结构体`StructA`和`StructB`,分别包含字段`root`和`data`,代码如下: ```python class StructA: def __init__(self, root, data): self.root = root self.data = data class StructB: def __init__(self, root, data): self.root = root self.data = data ``` 然后,我们可以创建多个结构体对象,并将这些对象存储在一个列表中,以便进行排序和输出。例如,假设我们创建了三个`StructA`的对象和两个`StructB`的对象,代码如下: ```python structs = [ StructA(2, "A2"), StructB(3, "B3"), StructA(1, "A1"), StructA(4, "A4"), StructB(5, "B5"), ] ``` 接下来,我们可以使用Python内置的`sorted()`函数进行排序,通过指定`key`参数来指定按照结构体的根结点进行排序。然后,我们可以使用循环遍历排序后的列表,并输出每个结构体数据。完整代码如下: ```python structs_sorted = sorted(structs, key=lambda s: s.root) for struct in structs_sorted: print(struct.data) ``` 运行上述代码,可以按照结构体的根结点进行排序,并输出每个结构体数据。 综上所述,通过使用Python中的来定义多个结构体,以及使用`sorted()`函数进行排序,然后循环遍历输出数据,可以实现按结构体输出数据的同时根据结构体根结点排序的功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

糯诺诺米团

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值