我正在使用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']]
如何删除可变长度和额外字符的不确定内部列表?
答案 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()]