2012-04-24 2 views
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']] 

Как я могу удалить такую ​​неопределенную внутренний список переменной длины и дополнительных символов?

+2

Вы должны определить _ "Что должно быть удалено?" _ И _ "Что должно быть?" _. В противном случае мы все теряем время, думая, что вы думаете. –

+2

Кроме того, когда вы говорите: «Я работаю над пониманием списка», вы должны помочь нам, указав свое понимание списка ... в этом вопросе нет. – Johnsyweb

ответ

7

Вот один подход:

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

Я не очень нравится, хотя, это делает слишком много в одной строке.

Если бы вы могли описать лучше то, что вы пытаетесь слов, вы найдете его гораздо проще описать Python (или любой другой язык).

+4

+1 Мне нравится это решение, кажется мне очень хорошим. – jamylak

+3

Также может быть 'y.isdigit()' в зависимости от намерения OP –

+1

@gnibbler: Может быть. Спецификации очень не хватало. – Johnsyweb

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']] 
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()] 
Смежные вопросы