Bazı numaraları sıralamak için python kullanıyorum. Bir değer (4, 8, 16, 32, 64, vb.) Girmeme, sayı dizisi oluşturmamıza ve sıralarını yeniden düzenlememize olanak tanıyan bir işlev oluşturmak istiyorum.Döngüler için dinamik bir sayı ile yineleyin (Python)
I değeri = 4 sırası belirleme ayrıntılı rakamlar ve değer = 4 dizisi için 8.
(x = [0, 1, 2, 3]) bölünmüş olmalıdır ekledik iki ([0,1] ve [2,3]) cinsinden ve daha sonra her bir dizideki ilk sayıya göre birleştirilmiştir ([0, 2, 1, 3]). değer için
= 8 dizisi (x = [0, 1, 2, 3, 4, 5, 6, 7]) içine bölünmüş olmalıdır iki ([0, 1, 2, 3 ] ve [4, 5, 6, 7]). Her iki dizinin tekrar ikiye ayrılması gerekir ([0, 1, 2, 3] [0,1] ve [2,3] ve [4, 5, 6, 7] 'ye [4,5] ve [6, 7]). Ardından diziler, her dizideki ilk sayıya ve dizilerden oluşan ikinci diziye göre birleştirilmelidir ([0, 4, 2, 6, 1, 5, 3, 7]).
I (dinamik döngüler için iç içe) Özyinelemeyi nasıl işleneceğini bilmiyorum. Diziyi bölerek oluşturulan her bir brach ile döngülemeye çalışıyorum. Itertools ve özyinelemeye baktım (Function with varying number of For Loops (python)), ama işe yaramazdım. Aşağıda, şimdiye kadarki yaklaşımımı göstermek için kod ekledim.
Herhangi bir yardım çok takdir edilmektedir. Sıralamayı belirlemek için başka fikirlere de açığım.
Python 2.7.6 ve numpy kullanıyorum.
Kodu:
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)
Çıktı:
[0, 2, 1, 3]
Kodu:
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)
Çıktı:
[0, 4, 2, 6, 1, 5, 3, 7]
Değer = 16 için çıkış [0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7 15] olmalıdır.
ihtiyacınız mı uyuşmuş bir çözüm? Bu basit bir pythonda yapılabilir, sanırım –
Bence ihtiyacın olan şey, sayıların ikili formunu almak ve onları antialphabetically olarak sıralamak. – Ilja