Ich benutze Python, um einige Zahlen zu sequenzieren. Ich möchte eine Funktion erstellen, die es mir erlaubt, einen Wert einzugeben (4, 8, 16, 32, 64, usw.), ein Array von Zahlen zu erstellen und ihre Reihenfolge neu zu ordnen.Iterate durch eine dynamische Anzahl von for-Schleifen (Python)
Ich habe Zahlen gegeben, die ausführlich, wie die Sequenz, die für Wert bestimmen = 4 und 8.
Für Wert = 4 das Array (x = [0, 1, 2, 3]) aufgespalten werden soll in zwei ([0,1] und [2,3]) und dann kombiniert basierend auf der ersten Zahl in jedem Array ([0, 2, 1, 3]).
Für Wert = 8 das Array (x = [0, 1, 2, 3, 4, 5, 6, 7]) in zwei aufgeteilt werden ([0, 1, 2, 3 ] und [4, 5, 6, 7]). Beide Arrays sollten wieder in zwei Teile aufgeteilt werden ([0, 1, 2, 3] in [0,1] und [2,3] und [4, 5, 6, 7] in [4,5] und [6], 7]). Dann sollten die Arrays basierend auf der ersten Nummer in jedem Array und der Sequenz des zweiten Satzes von Arrays ([0, 4, 2, 6, 1, 5, 3, 7]) kombiniert werden.
Ich weiß nicht, wie die Rekursion zu handhaben (dynamisch für Schleifen verschachtelt). Ich versuche, jeden Bruch, der durch das Teilen des Arrays erzeugt wird, zu durchlaufen. Ich habe in itertools und Rekursion (Function with varying number of For Loops (python)) untersucht, aber ich konnte es nicht arbeiten lassen. Im Folgenden habe ich einen Code hinzugefügt, der meinen bisherigen Ansatz veranschaulicht.
Jede Hilfe wird sehr geschätzt. Ich bin auch offen für andere Ideen, um die Reihenfolge zu bestimmen.
Ich benutze Python 2.7.6 und numpy.
Code:
import numpy
value = 4
a = []
x = numpy.arange(value)
y = numpy.array_split(x, 2)
for i in range(2):
for j in y:
a.append(j.tolist()[i])
print(a)
Ausgang:
[0, 2, 1, 3]
Code:
import numpy
value = 8
a = []
x = numpy.arange(value)
y = numpy.array_split(x, 2)
for i in range(2):
for h in range(2):
for j in y:
z = numpy.array_split(j, 2)
a.append(z[h][i])
print(a)
Ausgang:
[0, 4, 2, 6, 1, 5, 3, 7]
Der Ausgang für Wert = 16 sollte [0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15] sein.
Sie benötigen eine Lösung in numpy? Dies könnte in einfachen Python getan werden, denke ich –
Ich würde sagen, dass Sie die binäre Form der Zahlen nehmen und sie antialphabetisch sortieren müssen – Ilja