我有以下列表:
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]
但是有更优雅的方式吗?在一行?
答案 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]]