将int和bool值拆分为两个不同的列表

时间:2016-03-08 08:50:34

标签: python

我有以下列表:

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]

但是有更优雅的方式吗?在一行?

4 个答案:

答案 0 :(得分:3)

你的尝试是相当可理解的,更多的是你可以在一个陈述中将你的b和c结合起来:

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

答案 1 :(得分:1)

使用传统的for循环。通过这种方式,您不需要在同一列表上迭代两次。

>>> 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]]

答案 2 :(得分:0)

我想在一行中这样做实际上不那么优雅。 请记住,最重要的 - 如果我们不考虑表演 - 是某人(或将来的某个人)可以轻松理解您的代码。

这个很容易理解,也没有错,我肯定会去找它

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