说我有这个数组:
foo = [["a", "b"], ["c", "d"]]
如果我想打印内部数组的元素,我会这样做:
for array_ in foo:
for element in array_:
print element
这样做之后,我会得到这个结果:
a
b
c
d
如何垂直打印每个内部数组,然后将其与另一个数组连接,就像这样?
ac
bd
答案 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