2016-12-19 8 views
0
result = ['袁惟仁', None, 'Life'] 
# Replace None with empty string 
response = ['' if s is None else s for s in result] 
# Handle non-ascii characters 
return [s.encode('utf-8') if isinstance(s, unicode) else str(s) for s in response] 

このコードでは、リストの値が ''でない場合、Unicode文字を処理します。これは正常に動作しますが、より良い方法があるかどうかを知りたいと思っています。今私が空を処理しない場合、私は変換できないと言うエラーを受け取りますなし to str。Pythonリストの理解クエリ

+0

本当に関連していないが、私は 'insinstance(S、ユニコード)わからない'あなたはそれをやっていると思う何をやっています。 –

+0

あなたはどのバージョンのPythonを使用していますか? –

+0

Pythonバージョン2.7.6 – spicyramen

答えて

2

同じ結果があなたのようリスト内包で式をorを使用して経由して取得することがあります。

>>> result = ['袁惟仁', None, 'Life'] 

>>> [r or '' for r in result] 
['\xe8\xa2\x81\xe6\x83\x9f\xe4\xbb\x81', '', 'Life'] 

ところで、私はあなたが明示的に.encode('utf-8')をやっている理由の部分を得ることはありません。

+0

あなたは彼の質問を間違って読んでいると思います。彼はより良い方法を求めています。私はそれを明示的に伝える必要はないと同意する。 – TemporalWolf

+0

@TemporalWolf:そして、私のように、彼が望むことをやるためのより良い方法です:)私の答えを改善するための提案が最も歓迎されています。 –

+0

これはあなたの今削除された編集を指示しました。答え自体は私にとってはうまく見えます。 – TemporalWolf

0

filter(None, result)は、リストから任意のNone秒を削除します:

filter(None, result) 
['\xe8\xa2\x81\xe6\x83\x9f\xe4\xbb\x81', 'Life'] 
+0

私はなしを保持し、それを " – spicyramen