[英]Python .join() with a 2d array
说我有这个数组:
foo = [["a", "b"], ["c", "d"]]
如果要打印内部数组的元素,则可以执行以下操作:
for array_ in foo:
for element in array_:
print element
完成此操作后,我将得到以下结果:
a
b
c
d
我如何垂直打印每个内部数组,然后将其与另一个数组连接,像这样?
ac
bd
一种方法是使用zip()
:
>>> foo = [["a", "b"], ["c", "d"]]
>>> [''.join(a) for a in zip(*foo)]
['ac', 'bd']
zip(*foo)
返回元组列表,其中第i个元组包含每个输入列表中的第i个元素。 和join()
连接列表的内容。
如果列表变量foo
的列表中的列表很大,则可以从itertools
模块中使用zip()
的高效版本:
>>> from itertools import izip
>>> foo = [["a", "b"], ["c", "d"]]
>>> [''.join(a) for (a) in izip(*foo)]
['ac', 'bd']
使用map()
较短版本:
import operator as op
map(op.add ,*foo)
=> ['ac', 'bd']
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')]
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.