0

私はPythonでリストの理解に取り組んでいます。

l = [['200801', '100'], ['', ''], ['200802', '151'], [''], ['200805', '160'] ,['', u''], [''], [u'\xa0'], ['\r\n                       \r\n                        ', '\r\n                      '], ['200812', '50']]

次のように出力したい

[['200801', '100'], ['200802', '151'], ['200805', '160'], ['200812', '50']]

このような可変長の不確実な内部リストと余分な文字を削除するにはどうすればよいですか?

4

3 に答える 3

7

1 つのアプローチを次に示します。

>>> [x for x in l if all(y.strip() for y in x)]
[['200801', '100'], ['200802', '151'], ['200805', '160'], ['200812', '50']]

私はそれがあまり好きではありませんが、1行でやりすぎです。

言葉にしようとしていることをよりよく説明できれば、 Python (または他の言語)で説明する方がはるかに簡単であることがわかります。

于 2012-04-24T10:56:33.923 に答える
5

正規表現を使用して、数字のように見えるパターンを検索できます。

>>> x = [['200801', '100'], ['', ''], ['200802', '151'], [''], ['200805', '160'] ,['', u''], [''], [u'\xa0'], ['\r\n                       \r\n                        ', '\r\n                      '], ['200812', '50']]
>>> import re
>>> [p for p in x if all(re.match(r'\d+', q) for q in p)]
[['200801', '100'], ['200802', '151'], ['200805', '160'], ['200812', '50']]
于 2012-04-24T10:57:18.493 に答える
4

joinここで重宝します

# keep only non-empty lists
print [x for x in l if ''.join(x).strip()]

# keep only lists with digits
print [x for x in l if ''.join(x).isdigit()]
于 2012-04-24T11:35:15.647 に答える