基于python中列表对象的属性交错排列两个对象列表

2024-09-24 20:35:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个标记对象列表:

class Marker():
    def __init__(self,marker_number, marker_data):
        self.marker_number = marker_number
        self.marker_data = marker_data

我想做的是:

^{2}$

因此,当我交错标记时,新标记列表中与原始标记列表中编号相同的标记出现在原始标记之后,但编号会更新以保持编号顺序。这是我目前的做法:

def interlace_markers(current_markers_list, new_markers_list):

    interlaced_markers = []
    #interlace the markers
    for existing_marker in current_markers_list:
        interlaced_markers.append(existing_marker)
        for new_marker in new_markers_list:
            if new_marker.marker_number== existing_marker.marker_number:
                interlaced_markers.append(new_marker)

    #reset the sequence
    sequence_index = 1
    for marker in interlaced_markers:
         marker.marker_number= sequence_index
         sequence_index += 1

    return interlaced_markers

我有两个问题:

  1. 什么是最Python式的方法
  2. 原始列表很可能是大的~10k,并从 外部文件,但新列表会很小~100-300长,是吗 有没有比使用列表更有效的方法?在

Tags: in标记selfnumber列表newfordata
1条回答
网友
1楼 · 发布于 2024-09-24 20:35:18

如果我能正确理解你的意思,我认为这是最容易做到的简单排序:

interlace_markers = existing_markers + new_markers
interlace_markers.sort(key = lambda x: x.marker_number)

现在,如果要更改编号,可以在一个简单的循环中执行此操作:

^{pr2}$

请注意,这是因为python的排序是稳定的,这意味着如果不需要的话,顺序不会改变。在

这就产生了一个O(n)+O(nlogn)=O(nlogn)的算法,这个算法并不糟糕。在

相关问题 更多 >