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

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

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

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

Q&A

解決済

4回答

1286閲覧

Python3 リストのリストの要素を一括表示したい

sh0Tu

総合スコア1

Python 3.x

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

0グッド

1クリップ

投稿2020/10/02 08:06

編集2020/10/02 11:48

前提・実現したいこと

grid = [['0', '0', '1', '0', '0'],['0', '1', '1', '1', '0'],['0', '1', '1', '1', '0'],['0', '0', '1', '0', '0']]
というリストを、

00100
01110
01110
00100
と要素のみを並べて表示したいです。
その際、処理が早い方法を探しております。

該当のソースコード

grid = [['0', '0', '1', '0', '0'],['0', '1', '1', '1', '0'],['0', '1', '1', '1', '0'],['0', '0', '1', '0', '0']]

for r in range(100):
for i in grid:
print(*i)

この方法だと、要素をひとつひとつ取り出して表示してるのか、処理が遅いです。
一括で表示出来る様な方法を教えて頂けないでしょうか。

試したこと

[print(*i) for i in grid]
この記述も試してみましたが、やっていることは同じ?なのか速度は変わりませんでした。

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

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

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

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

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

TakaiY

2020/10/02 08:24

「遅い」というのも観点によって異なります。 今どのように「遅く」てどれだけ「速く」したいんでしょうか?
sh0Tu

2020/10/02 08:39

この処理を100回ループすると、大体20秒程かかります。 処理が流れているのを見ていると、1回の処理で20回printされている様なので、これを1回printで表示できれば、1/20程になるんじゃないかと思っています。
Daregada

2020/10/02 09:00 編集

展開・表示にかかる時間をうちのマシンのJupyter Labの%%timitで計測すると、100回ループした合計はだいたいmsオーダーなんですが、20秒かかるってどんな環境ですか。
guest

回答4

0

ベストアンサー

実際はもっとデータ数が多いと言うことでしょうか?

printの回数を減らす観点だと、joinすれば回数は減りますが、
print("\n".join(["".join(x) for x in grid]))
文字列データを新規でメモリ上に作り出すので、デーサイズによってはそこでガベージコレクションが発生したりします。

・1要素ずつprintする(お書きのコード)
・1行ずつjoinして、行数回だけprintする
・全部joinして1回でprintする(上記コード)

でデータ数を変えながら実行して、時間変化を見て考えるのでしょうか。

投稿2020/10/02 09:55

otn

総合スコア85901

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

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

sh0Tu

2020/10/02 11:26

20秒ほどかかっていたのが、1.8秒ほどになりました! 表示のされ方も望み通りで助かりました。ありがとうございます。
otn

2020/10/02 11:49

メモリーが逼迫するほどのデータ量では無かったと言うことですかね。 よかったです。
guest

0

forを使いたくないなら、

Python

1from itertools import chain 2print(*chain.from_iterable(grid)) 3# 0 0 1 0 0 0 1 1 1 0 0 1 1 1 0 0 0 1 0 0

投稿2020/10/02 08:53

編集2020/10/02 10:40
ForestSeo

総合スコア2722

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

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

sh0Tu

2020/10/02 11:36

この処理が速度は一番はやかったです! ただ表示をどうすればリストごとに改行して並べれるかが分かりませんでした。。。
guest

0

速いかどうかは分からないのですが、pandas のデータフレームに変換して、表示するのはどうでしょうか?

Python

1import pandas as pd 2 3grid = [ 4 ['1', '0', '1', '0', '0'], 5 ['0', '1', '1', '1', '0'], 6 ['1', '1', '1', '1', '0'], 7 ['0', '0', '1', '0', '0'] 8] 9 10grid_pd = pd.DataFrame(data=grid) 11 12print(grid_pd.to_string(index=False))

上記の実行結果

0 1 2 3 4 1 0 1 0 0 0 1 1 1 0 1 1 1 1 0 0 0 1 0 0

投稿2020/10/02 10:25

takutakuya

総合スコア979

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

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

0

Python

1for i in grid: 2 print(" ".join(i))

print(*i)と同じ出力になるようにしているが、質問に書いてあるように空白を挟まず出力したければ、"".join(i)にすればいい。

投稿2020/10/02 08:43

編集2020/10/02 08:46
Daregada

総合スコア11990

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問