在Python中使用list comprehension做类似于zip()的事情?

jam*_*ieb 10 python list-comprehension list

我是一个Python新手,我想要做的事情之一是围绕列表理解.我可以看到它是一个非常强大的功能,值得学习.

cities = ['Chicago', 'Detroit', 'Atlanta']
airports = ['ORD', 'DTW', 'ATL']

print zip(cities,airports)
[('Chicago', 'ORD'), ('Detroit', 'DTW'), ('Atlanta', 'ATL')]
Run Code Online (Sandbox Code Playgroud)

如何使用列表推导,以便将结果作为列表中的一系列列表而不是列表中的一系列元组?

[['Chicago', 'ORD'], ['Detroit', 'DTW'], ['Atlanta', 'ATL']]
Run Code Online (Sandbox Code Playgroud)

(我意识到在这种情况下字典可能更合适,但我只是想更好地理解列表).谢谢!

Gre*_*ill 32

像这样的东西:

[[c, a] for c, a in zip(cities, airports)]
Run Code Online (Sandbox Code Playgroud)

或者,list构造函数可以将元组转换为列表:

[list(x) for x in zip(cities, airports)]
Run Code Online (Sandbox Code Playgroud)

或者,map在这种情况下,函数略显冗长:

map(list, zip(cities, airports))
Run Code Online (Sandbox Code Playgroud)


Ale*_*lli 5

zip如果没有、map、 或的帮助,列表理解itertools无法在多个序列上建立“并行循环”——只能在一个序列上建立简单循环,或在多个序列上建立“嵌套”循环。


Dav*_*rby 5

如果你想在不使用zip的情况下这样做,你必须做这样的事情:

[ [cities[i],airports[i]] for i in xrange(min(len(cities), len(airports))) ]
Run Code Online (Sandbox Code Playgroud)

但除了智力锻炼外,没有理由这样做.

使用map(list, zip(cities, airports))更短,更简单,几乎肯定会运行得更快.