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

这是一种方法:

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

不过我不太喜欢它,它在一行中做的太多了。

如果你能更好地描述你想要表达的东西,你会发现用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 回答