>>> 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魔法是什么?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)