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

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

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

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

Python

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

Q&A

解決済

5回答

856閲覧

pythonでリストの変形がうまくできない

Sonono

総合スコア85

Python 3.x

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

Python

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

0グッド

0クリップ

投稿2019/01/11 05:56

l = ['1 2', '2 1']

というリストを、

k = [1, 2, 2, 1]

というリストに変形したいのですがうまくいきません。

一応じぶんでやったのものせておきますがエラーが出てしまいます。

l = ['1 2', '2 1'] for i in l: k = int(i.split())

に対し、

int() argument must be a string, a bytes-like object or a number, not 'list'

というエラーコードが出てしまいます。

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

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

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

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

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

guest

回答5

0

解決方法については既に充分な回答が付いているのですが、エラーについて補足します。


int() argument must be a string, a bytes-like object or a number, not 'list'

変数の値を覗いてみましょう。

Python

1l = ['1 2', '2 1'] 2for e in l: 3 tmp = e.split() 4 print(type(tmp), tmp) # <class 'list'> ['1', '2'] 5 k = int(tmp) # TypeError

splitした結果はlist型なので、そのままintに渡すことはできません。

良しなに数値化してくれるステキ機能(お節介とも呼ぶ)は無いので、
各要素を巡回して数値化し、リストに放り込む処理を自前で書いてやる必要があります。

投稿2019/01/11 07:54

LouiS0616

総合スコア35658

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

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

Sonono

2019/01/11 16:37

わかりました。ありがとうございます!
guest

0

ベストアンサー

ちょっと複雑ですが以下のように書けばよいです。

Python

1l = ['1 2', '2 1'] 2k = [] 3for i in l: 4 k += [int(n) for n in i.split()] # '1 2' -> ['1','2'] -> [1,2] 5print(k)

投稿2019/01/11 06:00

can110

総合スコア38233

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

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

Sonono

2019/01/11 06:03

理解しました!ありがとうございます。
guest

0

python

1>>> l = ['1 2', '2 1'] 2>>> [int(y) for x in l for y in x.split()] 3[1, 2, 2, 1] 4

投稿2019/01/11 06:32

hayataka2049

総合スコア30933

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

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

Sonono

2019/01/11 16:37

forをいくつも内包して書けるんですね...! 勉強になりました。
guest

0

2つの方法を示します。

python3

1list(map(lambda x: int(x), ' '.join(strs).split())) 2[int(x) for x in ' '.join(strs).split()]

実行例
イメージ説明

追記
list(map(int, ' '.join(strs).split()))
とも書けます。
イメージ説明

投稿2019/01/11 13:55

編集2019/01/11 18:43
katoy

総合スコア22324

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

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

0

python

1[*map(int, sum(map(str.split, l), []))]

投稿2019/01/12 10:33

YouheiSakurai

総合スコア6142

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問