5

我还在学习python,但这段代码似乎超出了我的水平。这是什么意思?

 pairs = [s2 for s1 in qs.split('&') for s2 in s1.split(';')]
4

1 回答 1

10

您可以将任何列表推导转换为等效的显式循环,如下所示:

pairs = []
for s1 in qs.split('&'):
    for s2 in s1.split(';'):
        pairs.append(s2)

规则是获取所有的forandif子句,按照它们出现的顺序嵌套它们,然后是第一个子句之前的append(foo)任何内容。foo

List Comprehension的教程部分(以及 Nested List Comprehensions 的小节)解释了这一点……但它没有为您提供将任何理解转换为嵌套块语句的简单规则,这(在我看来)使它更容易理解除了微不足道的案例。

还值得注意的是urllib.parse.parse_qsl(或urlparse.parse_qsl在 2.x 中)是解析查询字符串的更好方法。除了它不涉及难以阅读的嵌套列表理解这一事实之外,它还可以正确处理您事先不会考虑的各种事情(例如引用),并且最终会为您的其中一个进行调试不知道如何提交有用的错误报告的用户。

于 2013-04-01T21:46:48.787 回答