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

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

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

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

Q&A

3回答

4105閲覧

タブ区切りの文字列を、テーブル(2次元リスト)にするのに、どんな書き方をするだろうか

asari

総合スコア8

Python 3.x

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

0グッド

0クリップ

投稿2016/07/04 08:21

###前提・実現したいこと

最近Pythonを始めました。普段使っている言語はRubyです。

1 2 3 4 5 6

のようなタブ区切りメッセージを

[ [ 1,2,3 ], [ 4,5,6 ] ]

のような変数として格納したいと考えました。

###考えたこと

Rubyでは私は次のように書きます。

s = " 1 2 3 4 5 6 " tab = s.strip.split("\n").map {|s1| s1.split("\t").map(&:to_i) } p tab #=> [ [ 1,2,3 ], [ 4,5,6 ] ]

同じことをPythonでやろうとしたところ、次のようなコードになりました。

s = """ 1 2 3 4 5 6 """ tab = [ list(map( lambda s1: int(s1), s0.split("\t") )) for s0 in s.strip().split("\n") ] print(tab) #=> [ [ 1,2,3 ], [ 4,5,6 ] ]

発生している問題

  • map()はmapオブジェクトを返すので、list()で型変換する必要がありました。なにか無駄な回り道をしているような気がします。
  • はっきりした根拠はありませんが、書いたコードが読みづらい気がします。

お聞きしたいこと

普段Pythonを書いている皆さんならばどう考え、どう書きますか。

よろしくお願いします。

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

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

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

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

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

guest

回答3

0

python

1tab = [[int(s1) for s1 in s0.split("\t")]for s0 in s.strip().split("\n") ]

投稿2016/07/04 08:30

編集2016/07/04 08:31
hiro-k

総合スコア902

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

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

0

csv モジュールの reader を使ってみました。
x.py

python

1import csv 2 3csv_str = """ 41\t2\t3 54\t5\t6 6""" 7 8list = list(csv.reader(csv_str.strip().splitlines(), csv.excel_tab)) 9print(list)

実行結果

$ python x.py [['1', '2', '3'], ['4', '5', '6']]

投稿2016/07/06 21:36

katoy

総合スコア22328

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

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

0

私もhiro-kさんの回答とほぼ一緒です。

リスト内包表記を使うことで、
list関数を使わなくてもmap関数と同じ結果がリストで得られます。

行の分割は、s.strip().splitlines()という方法もあります。

あとは、私なら変数名をx,line(それぞれ、計算対象の1要素, 1行という意味)にします。
微々たるものですが、ほんの少しだけ読みやすさが上がると思います。

lang

1s = ''' 21\t2\t3 34\t5\t6 4''' # タブ文字は見えないのでエスケープシーケンスで表記 5 6tab = [[int(x) for x in line.split('\t')] for line in s.strip().splitlines()] 7print(tab)

投稿2016/07/06 04:05

argius

総合スコア9396

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問