マーカー オブジェクトの 2 つのリストがあります。
class Marker():
def __init__(self,marker_number, marker_data):
self.marker_number = marker_number
self.marker_data = marker_data
私がやりたいことはこれです:
>>> existing_markers = [Marker(marker_number=1, marker_data= 'a'),
Marker(marker_number=2, marker_data= 'b'),
Marker(marker_number=3, marker_data= 'c'),
Marker(marker_number=4, marker_data= 'd'),
Marker(marker_number=5, marker_data= 'e'),]
>>> new_markers = [ Marker(marker_number=1, marker_data= 'aa'),
Marker(marker_number=3, marker_data= 'bb'),
Marker(marker_number=5, marker_data= 'cc'),]
>>> interlace_markers(existing_markers, new_markers)
[Marker(marker_number=1, marker_data= 'a'),
Marker(marker_number=2, marker_data= 'aa'),
Marker(marker_number=3, marker_data= 'b'),
Marker(marker_number=4, marker_data= 'c'),
Marker(marker_number=5, marker_data= 'bb'),
Marker(marker_number=6, marker_data= 'd'),
Marker(marker_number=7, marker_data= 'e'),
Marker(marker_number=8, marker_data= 'cc')]
そのため、マーカーをインターレースすると、元のマーカー リストと同じ番号の new_markers リスト内のマーカーが元のマーカーの後に表示されますが、番号付けは更新されて番号付けされたシーケンスが維持されます。これは私の現在のアプローチです:
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
ここには2つの問題があります:
- これを行うための最もpythonicな方法は何ですか
- 元のリストはおそらく 10k まで大きく、外部ファイルから作成されますが、新しいリストは 100 ~ 300 まで小さくなります。リストを使用するよりも効率的な方法はありますか?