質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

12回答

873閲覧

配列の要素を4つずつ横8こずつ出力させたい

退会済みユーザー

退会済みユーザー

総合スコア0

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2017/07/07 00:34

編集2017/07/07 01:17

配列の要素を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ページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mattn

2017/07/07 00:38

まずはご自分で考えたコードを貼りましょう。
yohhoy

2017/07/07 00:45

文字qはどの位置に出力したいのでしょう?
Lhankor_Mhy

2017/07/07 01:11

その順序の法則をご明示ください。y z が別の行に出力されているあたりで分からなくなりました。
mattn

2017/07/07 01:12

あと最後の y z だけルールが変わっちゃってますね
退会済みユーザー

退会済みユーザー

2017/07/07 01:18

すみません、 y z部分の出力を間違いました、修正しました。
guest

回答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
tell_k

総合スコア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

shimizukawa

総合スコア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
kariya_mitsuru

総合スコア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
Lhankor_Mhy

総合スコア36074

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

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

mattn

総合スコア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
KSwordOfHaste

総合スコア18394

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

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
ctare

総合スコア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
yohhoy

総合スコア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

anozon

総合スコア662

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

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

mugwort_rc

総合スコア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
teddysummer

総合スコア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
zonoise

総合スコア14

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

zonoise

2017/07/07 02:42

自分の回答は誤回答でした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問