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

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

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

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

Q&A

解決済

4回答

15109閲覧

要素が1から100までのリストを10要素ごとに改行して表示したい

balckbell

総合スコア16

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

0グッド

0クリップ

投稿2018/12/06 08:13

編集2018/12/06 20:41

こんにちは。Python3のリストについての質問です。

###目標(修正:アメリカ時間 12:40pm)
コンパイル先で

1  2  3  4  5  6  7  8  9  10
11 12 13 14 15 16 17 18 19 20

というのを1から100まで、一行に10要素ずつ表示したいです。また、各要素を空白で区切り桁を揃えて表示したいです。(カンマではなく空白)

###試したこと
ウェブサイトを参考に書いてみたコードは以下の通りです。

python3

1a = [] 2for i in range(0,101): 3 a.append(i) 4print(' '.join(a[i:i+10]) for i in range(0,101,10)) 5

これをコンパイルしたところ、
<generator object〜〜〜>
というような表示が出ました。

このコードはどのように直したら良いのでしょうか?お時間がある方、ぜひお力を貸してください。よろしくお願いいたします。

###参考ウェブサイト
特定の要素数ごとに改行する方法(海外サイトStack Overflow)

###動作環境
macOS Mojave
Atomにインポートした(?)ターミナル
※足りない情報があれば随時追加いたします。ご指摘よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

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

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

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

quickquip

2018/12/06 08:36 編集

勘違いでした。取り消します。 →「Python3のコードをPython2で動かしている」状況と思われるので、タグにAtomを追加して、Atomのパッケージの正しい名前や設定を追記しましょう。
balckbell

2018/12/06 20:39

quiquiさん、ご指摘ありがとうございます。コンパイルする時にpython3と打ち込むので、Python3で動かしているものだと思い込んでおりました。。。Atomのパッケージと言いますと、'autocomplete-python’のようなものを指すのでしょうか?また、どのパッケージが入っているか確認するにはどうすれば良いのでしょうか?
quickquip

2018/12/06 23:26

すみません、python2でもpython3でも(メカニズムは少々違いますが)同じエラーになることに気づいたので、上のコメントはなかったことにしてもらってかまいません。
balckbell

2018/12/06 23:45

ご返信ありがとうございます。そうなのですね、知りませんでした。また新たなことを学ぶことができました。ありがとうございました。
guest

回答4

0

単なる表示だけなら以下のようにすることもできます。

python

1for i in range(1,101): 2 print(i,end=' ') 3 if i % 10 == 0: 4 print() 5

投稿2018/12/06 09:13

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

balckbell

2018/12/06 23:55

Stars1024さん、ご回答ありがとうございます。 追って質問なのですが、if文で10要素ごとに改行するコードを書いてくださいましたが、printする際にカッコの中身がないのはなぜでしょうか?個人的に、「改行する=\nを使う」というイメージがあって、print()というのは初めてみたので気になりました。
guest

0

10ごとに改行を入れるifをループに用意して、

Python

1s = '' 2for i in range(1,101): 3 s += "{0:4d}".format(i) 4 if i % 10 == 0: 5 s += '\n' 6 7print(s)

のようなコードで実現できます。
ただし、お示しのような値の左寄せではなく右寄せを
format関数で実現しています。

投稿2018/12/06 08:36

seastar3

総合スコア2285

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

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

can110

2018/12/06 08:40

「各要素を空白1つで区切りたい」とあるので、桁合わせは不要なのかなと思われます。
seastar3

2018/12/06 08:45

1行目は一桁で下の二桁の値と桁が揃っていますよ。100の3桁でも枠が揃うように4桁の書式で組んだものです。
can110

2018/12/06 08:49

ですね。 そもそも目標の「見た目」と「文言」に矛盾があるので、どちらを採用するかにより回答も違いが出ます。 回答を否定するつもりはありませんので、お気にさわりましたらすみません。
seastar3

2018/12/06 08:53

習作として、can110さん流の多重ループのアルゴリズムのサンプルと私のコントロールブレイクのアルゴリズムのサンプルと両方が参考になると存じます。
balckbell

2018/12/06 20:36

矛盾した表記をしてしまいすみません。空白1つで区切りたいと書きましたが、「各要素を空白で区切り、桁を揃えたい」というのが本当に表現したかったことです。補足修正しておきます。 ご回答、ご指摘ありがとうございました。
balckbell

2018/12/07 00:26

seastar3さん、ご回答ありがとうございます。 皆さんの回答を読みながら、ようやく理解できました。seastar3さんのサンプルは、以前ほんの少しですがCをかじっていた私にとってとても分かり易かったです。一つのタスクに対して色々なアルゴリズムが考えられうるのはプログラミングの面白いところですね。(時には大変なところになりうるのかもしれませんが・・・) お力を貸してくださり本当にありがとうございました。
guest

0

ベストアンサー

単純に。表示したいとのことなのでprintしています。

Python

1for i in range(10): 2 for j in range(10): 3 print(10*i+j+1,end=' ') 4 print() 5""" 61 2 3 4 5 6 7 8 9 10 711 12 13 14 15 16 17 18 19 20 821 22 23 24 25 26 27 28 29 30 931 32 33 34 35 36 37 38 39 40 1041 42 43 44 45 46 47 48 49 50 1151 52 53 54 55 56 57 58 59 60 1261 62 63 64 65 66 67 68 69 70 1371 72 73 74 75 76 77 78 79 80 1481 82 83 84 85 86 87 88 89 90 1591 92 93 94 95 96 97 98 99 100 16""" 17 18# ついでにワンライナーで 19[print(' '.join([str(10*i+j+1) for j in range(10)])) for i in range(10)]

質問修正をうけて

提示では数字、空白は全角であらわされていますが、以下では半角で出力しています。

Python

1for i in range(10): 2 for j in range(10): 3 print('{:<3d}'.format(10*i+j+1),end='') 4 print() 5""" 61 2 3 4 5 6 7 8 9 10 711 12 13 14 15 16 17 18 19 20 821 22 23 24 25 26 27 28 29 30 931 32 33 34 35 36 37 38 39 40 1041 42 43 44 45 46 47 48 49 50 1151 52 53 54 55 56 57 58 59 60 1261 62 63 64 65 66 67 68 69 70 1371 72 73 74 75 76 77 78 79 80 1481 82 83 84 85 86 87 88 89 90 1591 92 93 94 95 96 97 98 99 100 16""" 17 18# ついでにワンライナーで 19[print(''.join(['{:<3d}'.format(10*i+j+1) for j in range(10)])) for i in range(10)]

投稿2018/12/06 08:23

編集2018/12/06 23:18
can110

総合スコア38233

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

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

balckbell

2018/12/07 00:10 編集

can110さん、ご回答ありがとうございます。先ほどは混乱を招き申し訳ありませんでした。 追っていくつか質問があります。お時間がある時にお答えいただければ幸いです。 1.printの中身の'{:<3d}' という部分はどのように働いているのでしょうか? 2.iは要素、jは一行ごとの要素数(つまり10)と解釈したのですが、あっているでしょうか? 3.formatの中身はなぜそのような形になるのでしょうか?先ほど、上記2.を正しいとして、 ''' for i in range(100) for j in range(10) print('{:<3d}'.format(i+j+1),end='') print() ''' として実行したのですが、求めた形で実行されませんでした。なぜrangeとformatの中身はこのように変えることができないのでしょうか? (編集欄では二つ目のforの前などにスペースを入れているのですのが、うまく表示されないようです。実際の実行時には、iのrangeとformatの中身だけを変えました。) よろしくお願いいたします。
can110

2018/12/07 00:14

1.「<3」左寄せ3桁、「d」=整数です。詳細は「python format」で検索してみてください。 2.はい 3.インデントやfor文末尾に「:」がないなど不完全なソースなので何とも言えません。 が、まず気になるのは「i」を10回ではなく100回ループしている意図は何でしょうか?
balckbell

2018/12/07 00:22

1.、2.について、ありがとうございます。調べてみます。 3.すみません、:を脱落していました。 i in range(100)にしたのは、要素数が合計で100個なので、iのrangeをrange(100)にしても動くのではないかと思ってのことでした。ただ、たった今その考え自体が間違っていることに気づきました。そもそも、これを100回ループしてしまったら100行表示されてしまいますね。。。すみません、早とちりでした。 今回もご回答ありがとうございました。
guest

0

特定の要素数ごとに改行する方法(海外サイトStack Overflow)

にある回答コードを、それを流用した案を書いてみました。

ruby

1board = ['0 ' for i in range(100)] 2print('\n'.join(''.join(board[i:i+10]) for i in range(0,100,10))) 3print() 4 5board = [str(i + 1) for i in range(100)] 6print('\n'.join(' '.join(board[i:i+10]) for i in range(0,100,10)))

実行例
イメージ説明

投稿2018/12/06 15:33

katoy

総合スコア22324

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

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

balckbell

2018/12/07 00:16

katoyさん、ご回答ありがとうございます。 色々といじっていた時にint foundと出たので、どこでstrにすればいいのかというところでも実は悩んでおりました。katoyさんの回答を見て、それを行うべき場所がわかりました。ありがとうございます。 前半部分('0'を100個、一行に10個ずつ表示する部分)について一つ質問なのですが、ここでstrを使う必要がないのはなぜでしょうか? お時間がありましたらお答えいただけるととても助かります。よろしくお願いいたします。
katoy

2018/12/07 13:03

["0", "0", ..] と文字列 "0" が要素の配列になっているからです。
balckbell

2018/12/08 04:00

すみません、そうですね。たった今、自分が誤解していたことに気がつきました。お答えくださり、ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問