Python : 使用 zip 函数从循环中提取一个迭代表达式
Python : Extract one iteration expression from a loop with zip function
在 python3 中,我有以下循环:
for c,z in zip(ax.collections, [0.6, 0.8, 2, 0.7, 0.9, 2]):
c.zorder = z
我不明白为什么单次迭代不正确:
ax.collections.zorder = [0.6, 0.8, 2, 0.7, 0.9, 2]
?
谁能解释一下语法不正确的原因?这肯定是由于 zip
功能。
ax.collections
是某种形式的可迭代,所涉及的 list
文字也是如此。 zip
循环将 list
文字中的单个值分配给 ax.collections
中单个值的 zorder
。 ax.collections
本身可能根本没有 zorder
属性,即使它有,其中的值也不会知道它。
要使单个迭代正确(假设 ax.collections
是一个序列,而不是任意可迭代对象),您需要:
ax.collections[0].zorder = 0.6
# look up elem^^^ ^^^ assign single value to its attribute
ax.collections
本身没有被修改(只有其中的一项),并且只分配了 list
中的一个值。如果它有助于理解它,对于您示例中的序列,可以认为 zip
的行为类似于索引上的这个 unPythonic 循环:
mylist = [0.6, 0.8, 2, 0.7, 0.9, 2]
for i in range(min(len(ax.collections), len(mylist))):
c = ax.collections[i]
z = mylist[i]
c.zorder = z
只是 zip
循环明显更快,并且适用于任何可迭代的,而不仅仅是可索引的序列(并且不需要输入有名称,就像上面示例中的索引一样)。
在 python3 中,我有以下循环:
for c,z in zip(ax.collections, [0.6, 0.8, 2, 0.7, 0.9, 2]):
c.zorder = z
我不明白为什么单次迭代不正确:
ax.collections.zorder = [0.6, 0.8, 2, 0.7, 0.9, 2]
?
谁能解释一下语法不正确的原因?这肯定是由于 zip
功能。
ax.collections
是某种形式的可迭代,所涉及的 list
文字也是如此。 zip
循环将 list
文字中的单个值分配给 ax.collections
中单个值的 zorder
。 ax.collections
本身可能根本没有 zorder
属性,即使它有,其中的值也不会知道它。
要使单个迭代正确(假设 ax.collections
是一个序列,而不是任意可迭代对象),您需要:
ax.collections[0].zorder = 0.6
# look up elem^^^ ^^^ assign single value to its attribute
ax.collections
本身没有被修改(只有其中的一项),并且只分配了 list
中的一个值。如果它有助于理解它,对于您示例中的序列,可以认为 zip
的行为类似于索引上的这个 unPythonic 循环:
mylist = [0.6, 0.8, 2, 0.7, 0.9, 2]
for i in range(min(len(ax.collections), len(mylist))):
c = ax.collections[i]
z = mylist[i]
c.zorder = z
只是 zip
循环明显更快,并且适用于任何可迭代的,而不仅仅是可索引的序列(并且不需要输入有名称,就像上面示例中的索引一样)。