2016-04-01 19 views
3
yılında dizilerini dizisi

Ben dizilerini dizisi olduğunu varsayalım: piton ileUnzip bir Julia

arr = [(1,2), (3,4), (5,6)] 

Ben zip(*arr) == [(1, 3, 5), (2, 4, 6)]

Julia bu eşdeğer nedir yapabilir?

+2

yerine 'zip (arr ...) |> collect': "doğruluk kanıtı" olduğu gibi zip'' dahilinde arr' 'uyarıyla ihtiyacı . – amrods

+0

@amrods haklı. Bu sinir bozucu splat '...' ilk yorum üstüne kaymıştır. Doğruluk için, yorumu tekrar yorumlayacağız. –

+1

'zip (arr ...) |> topla 'bunu yapmalı. Ve en azından bir kere aşağıdakileri düşünmeliyiz: 'topla (zip (zip (arr ...) ...)) == arr' genellikle doğrudur. –

cevap

7

Sen zip() fonksiyonunu (docs here) kullanarak Julia aynı şeyi elde edebilirsiniz. zip(), birçok tuplesin çalışmasını bekler, böylece argümanlarınızı sağlamak için splatting operator...'u kullanmanız gerekir. Ayrıca Julia'da collect() işlevini kullanmanız gerekir; böylece yinelenenlerinizi bir diziye dönüştürün (eğer isterseniz). İşte

eylem bu işlevler şunlardır:

arr = [(1,2), (3,4), (5,6)] 

# wtihout splatting 
collect(zip((1,2), (3,4), (5,6))) 

# Output is a vector of arrays: 
> ((1,3,5), (2,4,6)) 

# same results with splatting 
collect(zip(arr...)) 
> ((1,3,5), (2,4,6)) 
+0

Büyük diziler için bu çok yavaş olduğunu unutmayın! Bakınız https://github.com/JuliaLang/julia/issues/13930#issuecomment-155142306 –

3

Julia:

kullanımı ...

for r in zip(arr...) 
println(r) 
end