我仍然学习python,但这段代码似乎超出了我的水平。这意味着什么?
pairs = [s2 for s1 in qs.split('&') for s2 in s1.split(';')]
答案 0 :(得分:11)
您可以将任何列表推导转换为等效的显式循环:
pairs = []
for s1 in qs.split('&'):
for s2 in s1.split(';'):
pairs.append(s2)
规则是采用所有for
和if
子句,按照它们出现的顺序嵌套它们,然后append(foo)
用于foo
之前的任何内容子句。
关于List Comprehension的教程部分(以及嵌套列表理解的子部分)解释了这一点......但它没有给出将任何理解转换为嵌套块语句的简单规则,(在我看来)除了微不足道的案例之外,所有人都能更容易理解。
值得注意的是urllib.parse.parse_qsl
(或2.x中的urlparse.parse_qsl
)是解析查询字符串的更好方法。除了它不涉及难以阅读的嵌套列表理解这一事实外,它还可以正确处理您不会事先考虑的各种事情(如引用),并最终调试其中一个不知道如何提交有用错误报告的用户。