配列の要素を4つずつ横8こずつ出力させたいです。
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
の配列の中身を
a b e f i j m n c d g h k l o p q r u v y z s t w x
という順序でprint文で出力させたいです。
どうfor文を組み合わせて書けるでしょうか?
for i in range(8):
までは思いついたのですが、どう4つずつ出力させればいいのかわからず...
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/07/07 00:45
2017/07/07 01:11
2017/07/07 01:12

退会済みユーザー
2017/07/07 01:18

回答12件
0
こんな感じはどうでしょうか? 最初に ab, cd というペアとしてリストを作って
それから、条件に応じてリストをスライスしていくと良いと思いました。
python
1l = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'] 2 3pairs = [' '.join(a) for a in zip(l[::2], l[1::2])] 4 5for i in range(len(l) // 8 + 1): 6 start = (0 if i < 2 else i - 2 if i % 2 else i - 1) * 4 7 print(' '.join(pairs[i % 2::2][start:start + 4]))
おまけです。(わかりづらいだけなのでやめた方が良いです)
python
1 2l = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'] 3print('\n'.join([' '.join([' '.join(p) for p in zip(l[::2], l[1::2])][i % 2::2][(0 if i < 2 else i - 2 if i % 2 else i - 1) * 4:((0 if i < 2 else i - 2 if i % 2 else i - 1) * 4) + 4]) for i in range(len(l) // 8 + 1)]))
投稿2017/07/07 04:47
編集2017/07/07 05:06総合スコア2120
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
Python
1>>> from itertools import chain 2>>> l = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'] 3>>> l2 = list(zip(l[::2], l[1::2])) 4>>> for i in range(len(l) // 16 + 1): 5... print(' '.join(chain.from_iterable(l2[i*8:(i+1)*8:2]))) 6... print(' '.join(chain.from_iterable(l2[i*8+1:(i+1)*8:2]))) 7... 8a b e f i j m n 9c d g h k l o p 10q r u v y z 11s t w x
投稿2017/07/07 04:09
総合スコア1847
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
ちょっとマジックナンバーありすぎな気もしますが…
python
1a = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'] 2 3print('\n'.join([' '.join([(lambda x:a[x] if x < len(a) else '')((i // 2 * 8 + i % 2) * 2 + j // 2 * 4 + j % 2) for j in range(8)]) for i in range(4)]))
追記:ちょっと計算式が冗長でした…
python
1a = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'] 2 3print('\n'.join([' '.join([(lambda x:a[x] if x < len(a) else '')((i // 2 * 6 + i) * 2 + (j & ~1) + j) for j in range(8)]) for i in range(4)]))
投稿2017/07/07 03:43
編集2017/07/07 05:26総合スコア18
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
力技すぎるかな。
python
1import itertools 2 3arr = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'] 4for x in itertools.zip_longest( *[iter(arr)]*16, fillvalue=' ' ): 5 print ( *[ y[0]+' '+y[1] for y in zip( x[ ::4], x[1::4] ) ] ) 6 print ( *[ y[0]+' '+y[1] for y in zip( x[2::4], x[3::4] ) ] )
投稿2017/07/07 03:11
編集2017/07/07 04:36総合スコア37409
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
python
1a = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'] 2b = [a[i:i+2] for i in range(0,len(a),2)] 3for j in range(0,len(a)/2,8): 4 print " ".join([" ".join(b[i]) for i in range(j,min(j+8,len(b)),2)]) 5 print " ".join([" ".join(b[i]) for i in range(j+1,min(j+8,len(b)),2)])
1行で書けない軟弱物ですすみません。。。。
投稿2017/07/07 01:23
総合スコア5030
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
なんだかみなさんのpython練習のような様相を呈していますが...
自分もやってみました。
python
1chars = [chr(97+i) for i in range(26)] 2print('chars\n', chars, sep='') 3 4r = "\n".join([" ".join(chars[i] 5 for i 6 in [c + (c & -2) + (r // 2) * 16 + (r & 1) * 2 7 for c 8 in range(8)] 9 if i < len(chars)) 10 for r 11 in range(((len(chars) + 15) // 16) * 2)]) 12print('result\n', r, sep='')
chars ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'] result a b e f i j m n c d g h k l o p q r u v y z s t w x
無理に1文にしたので適当なところで改行してます。
追記:python 3.x前提です。
投稿2017/07/07 02:36
編集2017/07/07 02:48総合スコア18404
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
こうですか
一行って言っていいのか分からないですが置いておきます。
python
1print((lambda a: (lambda la, lb: "\n".join(map(lambda x: "\n".join(map(lambda xx: " ".join(xx), x)), zip([[(la.remove(x), x)[1] for x in la[:8]] for n in range(len(la)) if la], [[(lb.remove(x), x)[1] for x in lb[:8]] for n in range(len(lb)) if lb]))))(list(__import__("itertools").chain(*zip(a[::4], a[1::4]))), list(__import__("itertools").chain(*zip(a[2::4], a[3::4])))))(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']))
もう少し短くなったので、それも貼っておきます
python
1print((lambda M:(lambda a,b:"\n".join(map(lambda x:" ".join(x),[(lambda l:[(l.remove(x), x)[1] for x in l[:8]])(b if n&1 else a) for n in range(len(a+b)) if a or b])))(*[list(__import__("itertools").chain(*zip(M[t::4],M[t+1::4]))) for t in range(0,3,2)]))("abcdefghijklmnopqrstuvwxyz"))
投稿2017/07/07 02:20
編集2017/07/07 02:53総合スコア14
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
ベストアンサー
Python
1L = [chr(c) for c in range(ord('a'), ord('z')+1)] 2 3Z = [L[i:i+2] for i in range(0, len(L), 2)] # 2文字づつチャンク化 4Z = [Z[i:i+8] for i in range(0, len(Z), 8)] # 2x8文字単位にブロック化 5Z = [z[::2] + z[1::2] for z in Z] # ブロック内チャンクをinterleave 6 7for xs in Z: 8 n = (len(xs) + 1) // 2 9 print(' '.join(sum(xs[:n], []))) # 2x8ブロック 1行目を出力 10 print(' '.join(sum(xs[n:], []))) # 2x8ブロック 2行目を出力
リスト力(ちから)が足りない...
投稿2017/07/07 01:32
編集2017/07/07 01:38総合スコア6191
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
数列化と関数毎に分解して考えてみました
python
1a = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'] 2 3# 余白含めた要素数(32 の倍数) 4l = len(a) + ((32 - len(a) % 32) % 32) 5 6# 数列の関数 7box = lambda n: (n % 16 * 2) - (n % 2) - (n % 16 > 7) * 14 + (n - n % 16) 8 9# 添字数列作成 10boxnums = list(map(box, range(l))) 11print(boxnums) 12# => [0, 1, 4, 5, 8, 9, 12, 13, 2, 3, 6, 7, 10, 11, 14, 15, 16, 17, 20, 21, 24, 25, 28, 29, 18, 19, 22, 23, 26, 27, 30, 31, 32, 33, 36, 37, 40, 41, 44, 45, 34, 35, 38, 39, 42, 43, 46, 47, 48, 49, 52, 53] 13 14# 範囲の数列作成 -> 配列に添字で適用 15getorspace = lambda a, i: a[i] if i < len(a) else " " 16res = list(map(lambda i: getorspace(a, i), boxnums)) 17print(res) 18# => ['a', 'b', 'e', 'f', 'i', 'j', 'm', 'n', 'c', 'd', 'g', 'h', 'k', 'l', 'o', 'p', 'q', 'r', 'u', 'v', 'y', 'z', ' ', ' ', 's', 't', 'w', 'x', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '] 19 20# スペース文字区切り、8 要素ずつ改行、 21print("\n".join([" ".join(res[i:i + 8]) for i in range(0, l, 8)])) 22 23# 余白なし 24print("\n".join([" ".join(res[i:i + 8]).strip() for i in range(0, l, 8)])) 25 26 27# for文 28for i in range(l // 8): 29 for j in range(8): 30 print(getorspace(a, box(i * 8 + j)), end="") 31 print() 32
投稿2017/07/07 05:46
総合スコア667
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
data = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'] print("".join([((("" if i % 8 == 0 else " ") + data[x]) if x < len(data) else "") + ("\n" if i % 8 == 7 else "") for i, x in enumerate([idx for inner0 in [[[[i, i+1] for i in range(x, x+16, 4)], [[i, i+1] for i in range(x+2, x+16, 4)]] for x in range(0, len(data), 16)] for inner1 in inner0 for inner2 in inner1 for idx in inner2])]))
こんな感じでどうでしょう。
投稿2017/07/07 03:17
総合スコア10
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
python
1x = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'] 2 3[print(("{} " if (n+1) % 8 else "{}\n").format(a), end="") for n, a in enumerate(x)]
問題勘違いしてました.全然違いますね.
投稿2017/07/07 02:32
編集2017/07/07 02:37総合スコア10
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
要素が32以上の場合はこうなりますか?
a b e f i j m n
c d g h k l o p
q r u v y z t w
s t w x t w x a
a b e f i j m n
c d g h k l o p
q r u v y z a a
a s t w x
一行じゃないですが
https://wandbox.org/permlink/ghXWjenX8orWqeo7
python
1l = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'] 2for i,c in zip(range(len(l)), l) : 3 print(c,end="") 4 print(" ",end="") 5 if (i+1)%4 == 0: 6 print('\n')
投稿2017/07/07 01:53
編集2017/07/07 02:08総合スコア14
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。