带有2d数组的Python .join()

时间:2014-08-26 02:16:17

标签: python arrays python-2.7

说我有这个数组:

foo = [["a", "b"], ["c", "d"]]

如果我想打印内部数组的元素,我会这样做:

for array_ in foo:
    for element in array_:
        print element

这样做之后,我会得到这个结果:

a
b
c
d

如何垂直打印每个内部数组,然后将其与另一个数组连接,就像这样?

ac
bd

4 个答案:

答案 0 :(得分:4)

一种方法是使用zip()

>>> foo = [["a", "b"], ["c", "d"]]
>>> [''.join(a) for a in zip(*foo)]
['ac', 'bd']

zip(*foo)返回元组列表,其中第i个元组包含来自每个输入列表的第i个元素。并join()连接列表的内容。

如果列表变量foo中的列表很大,您可以使用zip()模块中itertools的高效版本:

>>> from itertools import izip
>>> foo = [["a", "b"], ["c", "d"]]
>>> [''.join(a) for (a) in izip(*foo)]
['ac', 'bd']

答案 1 :(得分:2)

使用map()的较短版本:

import operator as op
map(op.add ,*foo)
=> ['ac', 'bd']

答案 2 :(得分:1)

map也可以使用:

["".join(x) for x in map(None,*foo)]

再次加入以获得字符串:

"\n".join(["".join(x) for x in map(None,*foo)])

在这种情况下,地图的行为类似于zip,它会转换元素:

In [39]: foo = [["a", "b"], ["c", "d"]]

In [40]: map(None,*foo)
Out[40]: [('a', 'c'), ('b', 'd')]

答案 3 :(得分:-1)

In [1]: foo = [["a", "b"], ["c", "d"]]

In [2]: print "\n".join("".join(f) for f in zip(*foo))
ac
bd

zip的内部调用将转置数组:

In [3]: zip(*foo)
Out[3]: [('a', 'c'), ('b', 'd')]

第一个join将每个元组连接在一起:

In [4]: ["".join(element) for element in zip(*foo)]
Out[4]: ['ac', 'bd']

最后,列表中的每个元素都通过外部调用加入join