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

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

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

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

Q&A

解決済

3回答

12253閲覧

リスト内のNoneの扱いについて

shunsuke1937

総合スコア48

Python 3.x

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

0グッド

0クリップ

投稿2018/08/16 09:22

編集2018/08/16 09:25

やりたいこと

リスト内のNoneを0に置き換えたい。
たとえば下記のリストがあります。
NI=['aaa','bbb','ccc',None,None,None]
上記のリストのNoneを0に置き換えたいと思います。
置き換え後、
NI=['aaa','bbb','ccc','0','0','0']
という形です。

試したこと

python

1NI=['aaa','bbb','ccc',None,None,None] 2NI=[n.replace(None,'0') for n in NI]

しましたが、attribute errorが帰ってきてしまい、
実行できておりません。
リスト内のNoneの扱いについててご教示いただけますでしょうか
よろしくお願いいたします。

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

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

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

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

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

guest

回答3

0

ベストアンサー

内包表記内でNone.replaceの呼び出しにトライしてしまっています。
次のようなエラーが出たのではないでしょうか。

Python

1>>> None.replace('hoge', 'fuga') 2Traceback (most recent call last): 3 File "<stdin>", line 1, in <module> 4AttributeError: 'NoneType' object has no attribute 'replace'

解決方法ですが、replaceメソッドを利用する代わりに条件演算子を用いれば良いかと。

Python

1>>> a = None 2>>> 'It is None' if a is None else 'It is not None' 3'It is None' 4>>> 5>>> a = 42 6>>> 'It is None' if a is None else 'It is not None' 7'It is not None' 8>>> 9>>> NI = ['aaa', 'bbb', 'ccc', None, None, None] 10>>> ['0' if n is None else n for n in NI] 11['aaa', 'bbb', 'ccc', '0', '0', '0']

投稿2018/08/16 09:27

LouiS0616

総合スコア35660

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

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

shunsuke1937

2018/08/16 11:17

具体的な例まで示していただきありがとうございました。 解決することができました。 条件演算子についてさらに勉強をしてみたいと思います。
guest

0

三項演算子を使ってください。

python

1['0' if n is None else n for n in NF]

投稿2018/08/16 09:25

hayataka2049

総合スコア30933

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

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

shunsuke1937

2018/08/16 11:17

ご回答いただきましてありがとうございます。 上記の方法で解決することができました。
guest

0

4 つの方法でかいてみました。
xxx.py

python3

1def replace_none(x): 2 return "0" if x is None else x 3 4data = ['aaa', 'bbb', 'ccc', None, None, None] 5 6data2 = list(map(replace_none, data)) 7print(data2) 8 9data3 = list(map(lambda x: "0" if x is None else x, data)) 10print(data3) 11 12data4 = [replace_none(x) for x in data] 13print(data4) 14 15data5 = ["0" if x is None else x for x in data] 16print(data5)

実行例
イメージ説明

要素を置き換えるメソッドを定義して、
A. それを map で使う。
B. それを list の内包表記で使う。

C. 無名関数定義して、 map で使う。

D. 置き換え処理そのものを list の内包表記で使う。

投稿2018/08/16 11:59

katoy

総合スコア22324

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

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

hayataka2049

2018/08/16 13:21

indexでループしてin-placeでというのもありですね
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問