gpt4 book ai didi

python - 这是什么 Python 魔法?

转载 作者:太空宇宙 更新时间:2023-11-03 12:31:02 26 4
gpt4 key购买 nike

如果你这样做 {k:v for k,v in zip(*[iter(x)]*2)} 其中 x 是一个列表,你会得到一个字典,其中所有奇数元素作为键,偶数元素作为它们的值。哇!

>>> x = [1, "cat", "hat", 35,2.5, True]
>>> d = {k:v for k,v in zip(*[iter(x)]*2)}
>>> d
{1: "cat", "hat": 35, 2.5: True}

我对字典推导式的工作原理、zip 的工作原理、* 如何提取参数、[iter(x)]*2< 的工作原理有基本的了解 连接列表的两个副本,所以我期待一对一的对应关系,如 {1: 1, "cat": "cat"...}

这是怎么回事?

最佳答案

这肯定是一段有趣的小代码!它利用的主要功能是您可能没有想到的是,对象实际上是通过引用传递的(它们实际上是 passed by assignment ,但是嘿)。 iter()构造一个对象,因此“复制”它(在本例中使用列表乘法)不会创建一个新对象,而是添加对同一对象的另一个引用。这意味着您有一个列表,其中 l[0]是一个迭代器,l[1]相同的迭代器 - 访问它们都访问同一个对象。

每次访问迭代器的下一个元素时,它都会从上次停止的地方继续。由于在 zip() 的元组的第一个和第二个元素之间交替访问元素创建时,单个迭代器的状态在元组中的两个元素之间推进。

在那之后,当它们扩展到 k, v 时,字典理解会简单地消耗这些对元组。 - 就像他们在任何其他词典理解中一样。

关于python - 这是什么 Python 魔法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44678510/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com