牌語備忘録 -pygo

あくまでもメモです。なるべくオフィシャルの情報を参照してください。

牌語備忘録 -pygo

シーケンスをn個ずつに分割をPythonでやってみた

2chの『Pythonのお勉強』スレッドが荒らされぎみだったのでここで。

3 :デフォルトの名無しさん:2008/08/04(月) 17:00:55
シーケンスをn個ずつに分割したいんだが
何かいい方法ないかい?

例えば 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' を3個ずつに分解して、
['ABC', 'DEF', 'GHI', 'JKL', 'MNO', 'PQR', 'STU', 'VWX', 'YZ'] のような状態にしたい。

:

4 :デフォルトの名無しさん:2008/08/04(月) 17:24:59
str = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
print [str[i:i+3] for i in range(0,len(str),3)]

こんなんかなあ。もっと綺麗に書ける方法あるかもしれないけど。

:

7 :デフォルトの名無しさん:2008/08/04(月) 21:50:41
re.findall(".{1,3}", s)

:

12 :3:2008/08/05(火) 01:42:28
>>4
やっぱり、それしかないのかな

>>7
それだと文字列には通用するのだが
リストやタプルのようなシーケンスには使えないのよ

Pythonのお勉強 Part28


これを再帰を使ってPythonでやってみた

#シーケンスをn個ずつに分割したい
def three_str(s, n):
    if not s:
        return []
    return [s[:n]] + three_str(s[n:], n)
#test
str = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
print three_str(str, 3)
print three_str(str, 5)
li = [1,2,3,4,5,6,7,8,9,10]
print three_str(li, 3)
print three_str(li, 5)

結果

['ABC', 'DEF', 'GHI', 'JKL', 'MNO', 'PQR', 'STU', 'VWX', 'YZ']
['ABCDE', 'FGHIJ', 'KLMNO', 'PQRST', 'UVWXY', 'Z']
[[1, 2, 3], [4, 5, 6], [7, 8, 9], [10]]
[[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]]

こんなんできました。