我知道 Python 中的 for x in list 循环,但我偶然发现了一种我找不到其文档的生成器。我发现下面的示例仅在列表 a 中的列表长度为 2 时才有效,或者它给出了解包错误,所以我怀疑某种 2 元组或 dict 相关的解包器可能在玩。有人可以向我解释一下这个生成器语法是如何工作的吗?
$ python
Python 2.7.10 (default, Oct 23 2015, 19:19:21)
[GCC 4.2.1 Compatible Apple LLVM 7.0.0 (clang-700.0.59.5)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> a = [[1,2],[3,4],[5,6]]
>>> (b for c, b in a)
<generator object <genexpr> at 0x1071abaa0>
>>> [x for x in (b for c, b in a)]
[2, 4, 6]
我在调用 min 时使用此生成器的项目中遇到了它。本来我以为是传入了多个args,但是语法没有意义,单独测试发现是生成器。
https://github.com/bigbighd604/Python/blob/master/graph/Ford-Fulkerson.py#L59
请您参考如下方法:
不要被 c, b 中的逗号所迷惑。在 Python 中,逗号——而不是圆括号——定义了一个元组。你的代码等同于[x for x in (b for (c, b) in a)],它遍历a的元素,赋值给c 到 a 中每个双元素列表的第一个元素,b 到第二个,然后将 b 分配给 x。如果 a 有一个不是双元素可迭代的元素,您将得到一个 ValueError。
