在Python中使用列表推导式实现类似zip()的功能?
我刚开始学习Python,想弄明白列表推导式。感觉这个功能很强大,值得学习。
cities = ['Chicago', 'Detroit', 'Atlanta']
airports = ['ORD', 'DTW', 'ATL']
print zip(cities,airports)
[('Chicago', 'ORD'), ('Detroit', 'DTW'), ('Atlanta', 'ATL')]
我该怎么用列表推导式,这样我得到的结果是一个列表里面包含多个列表,而不是一个列表里面包含多个元组呢?
[['Chicago', 'ORD'], ['Detroit', 'DTW'], ['Atlanta', 'ATL']]
(我知道在这种情况下,字典可能更合适,但我只是想更好地理解列表)。谢谢!
7 个回答
5
列表推导式如果没有借助 zip
、map
或者 itertools
这些工具,是无法在多个序列上进行“并行循环”的。它只能在一个序列上进行简单循环,或者在多个序列上进行“嵌套”循环。
8
如果你想完全不使用zip的话,你需要这样做:
[ [cities[i],airports[i]] for i in xrange(min(len(cities), len(airports))) ]
不过这样做除了当作智力练习之外没有什么特别的意义。
使用 map(list, zip(cities, airports))
这种写法更简洁、更简单,而且几乎肯定会运行得更快。
49
像这样:
[[c, a] for c, a in zip(cities, airports)]
另外,list
构造函数可以把元组转换成列表:
[list(x) for x in zip(cities, airports)]
或者,map
函数在这种情况下稍微简洁一些:
map(list, zip(cities, airports))