2016-03-08 2 views
0

У меня есть следующий список:ИНТА и BOOL значения разделенных в двух разных списках

a = [1104537600, 1199145600, False, 1199145600, 1443886293, True] 

, и я хочу разделить этот список на два подсписки, такие как:

[[1104537600, 1199145600,1199145600, 1443886293],[False,True]] 

Я использую следующий которые приводят к такому результату:

b = [value for value in a if type(value) is int] 
c = [value for value in a if type(value) is bool] 
d = [b,c] 

Но есть ли более элегантный способ? В одной строке?

+2

Выглядит довольно элегантно для меня. –

ответ

0

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

Это один легко понять, а не так, я бы пойти на это наверняка

1

Используйте традиционный цикл. Таким образом, вам не нужно дважды перебирать один и тот же список.

>>> num, b = [], [] 
>>> for i in a: 
    if type(i) is int: 
     num.append(i) 
    elif type(i) is bool: 
     b.append(i) 


>>> num 
[1104537600, 1199145600, 1199145600, 1443886293] 
>>> b 
[False, True] 
>>> [num, b] 
[[1104537600, 1199145600, 1199145600, 1443886293], [False, True]] 
+0

Но это более элегантно? Безопасные очень экстремальные случаи, это не имеет значения для производительности, если вы повторяете его один или два раза. – wvdz

3

Ваша попытка красиво и понятно, больше его можно комбинировать как ур б и в только один заявление, как:

d=[[value for value in a if type(value) is bool ],[value for value in a if type(value) is int ]] 
0

Вы могли бы построить d список следующим образом:

a = [1104537600, 1199145600, False, 1199145600, 1443886293, True] 
d = [[], []] 

for value in a: 
    if type(value) is int: 
     d[0].append(value) 
    elif type(value) is bool: 
     d[1].append(value)  

print d 

Отдает:

[[1104537600, 1199145600, 1199145600, 1443886293], [False, True]] 
Смежные вопросы