2016-06-11 7 views
0

Ich habe den folgenden Code:Wie funktioniert die Liste timeline_markers in Blender?

import bpy 
import math 
import random 


Markers = [] 

for marker in bpy.context.scene.timeline_markers: 
    frame = marker.frame 
    Markers.extend([frame]) 

print('-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+') 
print(Markers) 
Markers = sorted(Markers) 
print(Markers) 

Und wenn ich es ausführen, es gibt mir zwei verschiedene Ausgänge zur ersten print-Anweisung, bevor marker = sortierten (Marker) und danach.

, dass der Ausgang ist:

- + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + [33, 93, 151, 212, 265, 409, 640, 786, 524, 317] [33, 93, 151, 212, 265, 317, 409, 524, 640, 786]

Wenn der Zyklus der Elemente in timeline_markers liest haben sie nicht zu sein in aufsteigender Reihenfolge?

Aber angenommen, es ist nicht so, wie funktioniert das?

+0

Die Liste ist sortiert. Und Sie weisen auf die gleiche Variable zu. Deshalb wird es als unterschiedliche Ausgabe angezeigt. Eigentlich, was versuchst du zu archivieren? –

+0

Nein, ich meine, sollte es nicht standardmäßig sortiert sein? –

+0

Nein. Es wird nach der Ausführung von 'Markers = sorted (Markers)' sortiert. Sie können meine Antwort überprüfen. –

Antwort

0

Sie gehen davon aus, dass die timeline_markers als sortierte Liste gespeichert sind, dies ist nicht der Fall. Während sie Python als eine gemeinsame Liste/Array präsentiert werden, werden sie intern von Blender als eine verknüpfte Liste gespeichert. Wenn Sie den Quellcode zurückverfolgen, werden Sie ListBase wie in DNA_listBase.h definiert und in listbase.c implementiert.

Während wir Marker als eine Sequenz in einer Reihenfolge betrachten, die der Zeitlinie entspricht, gibt es keinen wirklichen Bedarf oder Vorteil, sie sortiert zu halten. Wenn Sie die Liste der Markierungen in Rahmenreihenfolge anzeigen möchten, müssen Sie sie nur selbst sortieren.

0

Kein Problem mit Ihrem Code. Der Code funktioniert gut, deshalb sieht es so aus. Sie sind der gleichen Variablen zugewiesen, deshalb zeigt es eine andere Ausgabe. Wenn Sie print(Markers) ausführen, gibt es das ursprüngliche Ergebnis. Nach Markers = sorted(Markers) ist die Liste geändert. Weisen Sie also eine andere Variable wie diese zu Sorted_Markers = sorted(Markers)

Sie können den Unterschied hier überprüfen.

In [1]: markers = [33, 93, 151, 212, 265, 409, 640, 786, 524, 317] 
In [2]: print (markers) 
[33, 93, 151, 212, 265, 409, 640, 786, 524, 317] 
In [3]: sorted_marker = sorted(markers) 
In [3]: print (markers) 
[33, 93, 151, 212, 265, 409, 640, 786, 524, 317] 
In [4]: print (sorted_marker) 
[33, 93, 151, 212, 265, 317, 409, 524, 640, 786] 
Verwandte Themen