如何一行代码实现将两个数组交叉

2014-06-16 18:06:40 +08:00
 gkiwi
t=[1,2,3]
m=['a','b','c']

两数组长度一致;
希望一行代码优雅的将数组一一交叉,得到类似如下结果:

[1,'a',2,'b',3,'c']
4729 次点击
所在节点    Python
25 条回复
xingxiucun
2014-06-16 18:17:42 +08:00
reduce(lambda x, y: x + y, zip(a, b))
tonyluj
2014-06-16 18:18:35 +08:00
想到一个(python):
[item for elem in zip([1,2,3],['a','b','c']) for item in elem]
gkiwi
2014-06-16 18:24:45 +08:00
@xingxiucun
@tonyluj
谢谢两位.
phuslu
2014-06-16 18:25:40 +08:00
我这个效率比较低,但是稍微短一些

sum(map(list, zip(t, m)), [])
ddzz
2014-06-16 18:29:48 +08:00
第一反应就是循环其中一个数组,然后将他们元素逐个加到一个新的数组,怎么实现不重要,能实现就行
gkiwi
2014-06-16 18:30:01 +08:00
@phuslu sum原来还能这样用...学习啦!
gkiwi
2014-06-16 18:31:25 +08:00
@ddzz 我也只会酱紫的...zip被卡住了~
hanks315
2014-06-16 18:34:03 +08:00
[item for elem in zip(a, b) for item in elem]
ddzz
2014-06-16 18:35:59 +08:00
@gkiwi 如果经常在各种语言中切换,笨方法往往是最好的。这里的笨方法是那种省脑子,但稍微累点手指的方法
gkiwi
2014-06-16 18:46:31 +08:00
@ddzz 已经被语言切换到杂乱!!
gkiwi
2014-06-16 18:48:32 +08:00
@hanks315 谢谢。
xieranmaya
2014-06-16 18:48:43 +08:00
_.flatten(_.zip([1,2,3],['a','b','c']))
JS的
xieranmaya
2014-06-16 18:49:06 +08:00
咦,这里好像是py板块...
hit9
2014-06-16 18:55:33 +08:00
来个sum的:

>>> sum(zip(t,m), tuple())
(1, 'a', 2, 'b', 3, 'c')
9hills
2014-06-16 19:15:25 +08:00
1l好评,效率也不错,reduce是迭代调用的
gkiwi
2014-06-16 20:39:54 +08:00
@xieranmaya 你乱入了...话说flatten,zip,_,是自带的函数?我查了查也没找到.用什么库了?
gkiwi
2014-06-16 20:40:42 +08:00
@hit9 学习了!
Actrace
2014-06-16 20:43:16 +08:00
一行代码是指调用一个函数(指令)还是写成一行?
不管是不是一个函数(指令),又或者纯靠语法,一行实现都没啥问题啊。
013231
2014-06-16 20:53:18 +08:00
@xingxiucun @9hills 使用標準庫中的itertools.chain, 效率高很多.

In [690]: a = range(1000)

In [691]: b = range(1000)

In [692]: timeit reduce(lambda x, y: x + y, zip(a, b))
100 loops, best of 3: 3.25 ms per loop

In [693]: timeit list(itertools.chain(*zip(x, y)))
10000 loops, best of 3: 110 µs per loop
9hills
2014-06-16 21:18:26 +08:00
@013231 感觉上面最大的是函数调用的开销

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/117831

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX