作者uranusjr (←这人是超级笨蛋)
看板Python
标题Re: [问题] for回圈问题
时间Fri Jul 12 01:33:15 2013
※ 引述《WaiTingKuo (:!)》之铭言:
: In [12]: a = [1, 2, 3, 4, 5, 6]
: In [13]: for x, y, in zip(*[iter(a)]*2):
: ....: print x, y
: ....:
: 1 2
: 3 4
: 5 6
1F:推 EntHeEnd:请问*[iter(a)]是什麽意思...@@? 07/12 00:55
你的运算优先权错了 =p
a 是 list (i.e. a 是 iterable)
iter(a) 会得到 a 的 iterator
[iter(a)] 就包成一个单一元素的 list
[iter(a)] * 2 会得到一个有两个元素的 list(而且两个元素会相同)
*[iter(a)] * 2 会把这个 list 展开成 zip 的两个参数
事实上 zip(*[iter(a)]*2) 就等同於
a_iter = iter(a)
zip(a_iter, a_iter)
事实上由於 iter 是回传 reference, zip(iter(a), iter(a)) 也完全对等
如果是我的话应该会这样写, 我个人很讨厌 list 乘法...
用 iter 的好处是不用复制一个 list, 也不会需要大量 random access
所以效率会比较好
--
「我最想要的同伴嘛,首先是要笑口常开,其次是我们能永远不会发生误会。
如果这些都能办到的话,嗯,如果他是世界上第一流的桥手,也还不错。」
-- 班尼多‧加罗素,前义大利蓝队成员
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.32.81.146
※ 编辑: uranusjr 来自: 114.32.81.146 (07/12 01:34)
2F:推 timTan:优先权的问题我也想了一下,这行 code 的浓度很高阿! 07/12 02:32
3F:→ EntHeEnd:喔喔... 谢谢! 07/13 16:35