将多个列表压缩在一起?

时间:2014-11-18 18:56:42

标签: python list

我有以下代码:

zero = ('one','two','three','four')

one   = '1.0,4.5,5.5,*,2.5,2.8,5.3,*,1.75,4.0,5.75,*,1.0,4.1,5.1,*,2.25,4.75,7.0,*,2.2,5.4,7.6,*,3.0,3.0,6.0,*,1.2,3.55,4.75,*,1.5,4.66666666667,6.16666666667,*,2.0,3.0,5.0,*,1.5,4.33333333333,5.83333333333,*,2.33333333333,2.8,5.13333333333,*,1.5,4.0,5.5,*,1.0,4.66666666667,5.66666666667,*,1.5,3.0,4.5,*,2.5,3.5,6.0,*,1.33333333333,3.4,4.73333333333,*,2.0,3.0,5.0,*,1.5,2.2,3.7,*,3.0,2.7,5.7,*,'
two   = '2.8,*,2.6,*,3.66666666667,*,4.0,*,1.5,*,2.16666666667,*,2.2,*,2.5,*,2.83333333333,*,2.8,*,2.83333333333,*,2.0,*,1.75,*,3.0,*,3.0,*,1.4,*,3.75,*,1.6,*,3.5,*,2.8,*,'

test = one, two = one.split("*,"),two.split("*,")
print test
print("\n".join("".join(x) for x in zip(one,two)))

这允许我将我的两个列表压缩在一起以获得如下所示的输出:

1.0,4.5,5.5,2.8,
2.5,2.8,5.3,2.6,
1.75,4.0,5.75,3.66666666667,
1.0,4.1,5.1,4.0,
2.25,4.75,7.0,1.5,
2.2,5.4,7.6,2.16666666667,
3.0,3.0,6.0,2.2,
1.2,3.55,4.75,2.5,
1.5,4.66666666667,6.16666666667,2.83333333333,
2.0,3.0,5.0,2.8,
1.5,4.33333333333,5.83333333333,2.83333333333,
2.33333333333,2.8,5.13333333333,2.0,
1.5,4.0,5.5,1.75,
1.0,4.66666666667,5.66666666667,3.0,
1.5,3.0,4.5,3.0,
2.5,3.5,6.0,1.4,
1.33333333333,3.4,4.73333333333,3.75,
2.0,3.0,5.0,1.6,
1.5,2.2,3.7,3.5,
3.0,2.7,5.7,2.8,

我一直在尝试使用for循环将多个列表压缩在一起的几种不同方法,但我没有运气。是否可以同时将两个以上的列表压缩在一起,或者是否有更好的方法来实现我想要的目标?

由于

1 个答案:

答案 0 :(得分:6)

zip()采用可变数量的参数。 zip(one, two, three)将起作用,等等,因为您希望传递的参数数量很多。

>>> zip([1, 2, 3], "abc", [True, False, None])
[(1, 'a', True), (2, 'b', False), (3, 'c', None)] 

如果你有一个未知数量的iterables(例如,它们的列表),你可以使用解包运算符(*)解压缩(用作参数)迭代的迭代:

>>> iterables = [[1, 2, 3], "abc", [True, False, None]]
>>> zip(*iterables)
[(1, 'a', True), (2, 'b', False), (3, 'c', None)] 

(这通常被称为解压缩,因为它会扭转操作 - a == zip(*zip(a))