这个Python魔法是什么?

这个Python魔法是什么?,第1张

概述如果你这样做{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, 如果你这样做{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,“猫”:“猫”……}.

这里发生了什么?

解决方法 这肯定是一段有趣的小代码!它可能没有预料到的主要因素是对象实际上是通过引用传递的(它们实际上是 passed by assignment,但是嘿). iter()构造一个对象,因此“复制”它(在列表中使用乘法,在这种情况下)不会创建一个新对象,而是添加另一个对同一个对象的引用.这意味着你有一个列表,其中l [0]是一个迭代器,l [1]是相同的迭代器 – 访问它们都访问同一个对象.

每次访问迭代器的下一个元素时,它都会继续它最后一次停止的位置.由于元素在zip()创建的元组的第一个和第二个元素之间交替访问,因此单个迭代器的状态在元组中的两个元素之间前进.

在那之后,字典理解只是消耗这些对元组,因为它们扩展到k,v – 就像在任何其他字典理解中一样.

总结

以上是内存溢出为你收集整理的这个Python魔法是什么?全部内容,希望文章能够帮你解决这个Python魔法是什么?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1194382.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存