Comment detail
文字列の均等分割 (Nested Flatten)なるほど。その発想を使ってみました。 cycleは与えられたリストを巡回し続ける無限リストで、zipは短い方に会わせて切り詰めます。
これでも算術演算やstrlenは必要ないですね…正規表現を使うよりは黒魔術っぽさがなくていいかも。
>>> cycle(range(3)) <itertools.cycle object at 0x0270AAA8> >>> zip(_, "hoge") [(0, 'h'), (1, 'o'), (2, 'g'), (0, 'e')]
1 2 3 4 5 | def divid(n, s):
from itertools import cycle
xs = zip(cycle(range(n)), s)
return ["".join(c for i, c in xs if i == j)
for j in range(n)]
|
Pythonの便利さがすごい・・・。 自分のコードは文字の長さを使っていたので、strlen相当の関数を使用しないように変更してみました。 ifelseは第1引数の条件がTRUEなら第2引数、FALSEなら第3引数の処理を実行します。 条件にはTRUE/FALSEのリストを渡すこともでき、その長さに応じて後ろの処理のリストはコピーされていきます。
1 2 | - breaks <- sort(rep(1:num, len=length(string)))
+ breaks <- sort(ifelse(string==string, 1:num))
|





kkobayashi
#4258()
[
R
]
Rating5/5=1.00
divid <- function(num, sample){ string <- unlist(strsplit(sample, "")) breaks <- sort(rep(1:num, len=length(string))) cat(sapply(1:num, function(n)(paste(string[breaks==n], collapse=""))), sep="\n") }Rating5/5=1.00-0+
2 replies [ reply ]