将多个列表压缩在一起?

问题描述 投票:0回答:1

我有以下代码:

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 循环将许多列表压缩在一起,但我没有任何运气。是否可以同时将两个以上的列表压缩在一起,或者是否有更好的方法来实现我想要的?

谢谢

python list
1个回答
43
投票

zip()
接受可变数量的参数。
zip(one, two, three)
可以工作,依此类推,可以传递任意数量的参数。

>>> for triple in zip([1, 2, 3], "abc", [True, False, None]):
...     print(triple)
... 
(1, 'a', True)
(2, 'b', False)
(3, 'c', None)

如果您有未知数量的可迭代对象(例如,它们的列表),则可以使用解包运算符 (

*
) 来解包(用作参数)可迭代对象的可迭代对象:

>>> iterables = [[1, 2, 3], "abc", [True, False, None]]
>>> for triple in zip(*iterables):
...     print(triple)
... 
(1, 'a', True)
(2, 'b', False)
(3, 'c', None)

(这通常被称为解压缩,因为它会反转操作,即:

zip(*zip(a))
给你返回
a
。)

© www.soinside.com 2019 - 2024. All rights reserved.