变量内部列表的列表理解示例

时间:2012-04-24 10:51:41

标签: python list compression

我正在使用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']]

如何删除可变长度和额外字符的不确定内部列表?

3 个答案:

答案 0 :(得分:7)

这是一种方法:

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

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

如果你能更好地描述你想要单词的内容,你会发现用 Python (或任何其他语言)描述它要容易得多。

答案 1 :(得分: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']]

答案 2 :(得分: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()]