邮编列表输出,而不是元组

从两个列表中进行列表清单的最快和最优雅的方式是什么?

我有

In [1]: a=[1,2,3,4,5,6] In [2]: b=[7,8,9,10,11,12] In [3]: zip(a,b) Out[3]: [(1, 7), (2, 8), (3, 9), (4, 10), (5, 11), (6, 12)] 

我想要

 In [3]: some_method(a,b) Out[3]: [[1, 7], [2, 8], [3, 9], [4, 10], [5, 11], [6, 12]] 

我正在考虑使用map而不是zip,但我不知道是否有一些标准库方法作为第一个参数。

我可以确定我自己的function,并使用地图,我的问题是,如果已经实施了一些东西。 ,也是一个答案。

如果你压缩了2个以上的列表(甚至只有2个),一个可读的方式是:

 [list(a) for a in zip([1,2,3], [4,5,6], [7,8,9])] 

这使用列表推导并将列表(元组)中的每个元素转换为列表。

我喜欢zip函数的优雅,但是在运算符模块中使用itemgetter()函数似乎要快得多。 我写了一个简单的脚本来testing这个:

 import time from operator import itemgetter list1 = list() list2 = list() origlist = list() for i in range (1,5000000): t = (i, 2*i) origlist.append(t) print "Using zip" starttime = time.time() list1, list2 = map(list, zip(*origlist)) elapsed = time.time()-starttime print elapsed print "Using itemgetter" starttime = time.time() list1 = map(itemgetter(0),origlist) list2 = map(itemgetter(1),origlist) elapsed = time.time()-starttime print elapsed 

我预计邮编会更快,但itemgetter方法赢得了一个远射:

 Using zip 6.1550450325 Using itemgetter 0.768098831177 

你几乎有自己的答案。 不要使用map而不是zip 。 使用map zip

您可以使用地图与zip一个优雅,function的方法:

 map(list, zip(a, b)) 

zip返回元组列表。 map(list, [...]) list中每个元组的调用列表。

我通常不喜欢使用lambda,但是…

 >>> a = [1, 2, 3, 4, 5] >>> b = [6, 7, 8, 9, 10] >>> c = lambda a, b: [list(c) for c in zip(a, b)] >>> c(a, b) [[1, 6], [2, 7], [3, 8], [4, 9], [5, 10]] 

如果你需要额外的速度,地图会稍微快一点:

 >>> d = lambda a, b: map(list, zip(a, b)) >>> d(a, b) [[1, 6], [2, 7], [3, 8], [4, 9], [5, 10]] 

但是,地图被认为是纯音乐,只能用于性能调整。

这个怎么样?

 >>> def list_(*args): return list(args) >>> map(list_, range(5), range(9,4,-1)) [[0, 9], [1, 8], [2, 7], [3, 6], [4, 5]] 

甚至更好:

 >>> def zip_(*args): return map(list_, *args) >>> zip_(range(5), range(9,4,-1)) [[0, 9], [1, 8], [2, 7], [3, 6], [4, 5]] 

列表理解将是非常简单的解决scheme,我猜。

 a=[1,2,3,4,5,6] b=[7,8,9,10,11,12] x = [[i, j] for i, j in zip(a,b)] print(x) output : [[1, 7], [2, 8], [3, 9], [4, 10], [5, 11], [6, 12]]