在Python中使用列表推导式实现类似zip()的功能?

19 投票
7 回答
37769 浏览
提问于 2025-04-15 18:40

我刚开始学习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

列表推导式如果没有借助 zipmap 或者 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))

撰写回答