有人可以解释以下代码行吗?它是某种嵌套的for循环吗?如果是这样,有人可以将其重写为等效的嵌套 for 循环。allPositions 参数是一个列表, synapsesPerSegment 是一个 int 变量。
for rx,ry in random.sample(allPositions, synapsesPerSegment):
这是一个正常的循环。没有嵌套。random.sample
从 中返回一个元素列表,allPositions
其中包含synapsesPerSegment
许多项。由于在 for 循环中分配给的变量是 form 中的元组(rx, ry)
,这表明它allPositions
是 form 中元组的列表(或集合),(rx, ry)
它们被分配给每次迭代。如果您有一个元组列表,则 for 循环每次迭代都会将它们“解包”到这些变量中。例如,如果您有rx
ry
(a, b) = (99, 100)
那么这个分配将解包:
(c, d) = (a, b)
所以c == 99
和d == 100
。
回到这个问题,这里有一些示例数据:
如果我们说:
allPositions = [(1,100), (2, 200), (3, 300), (4, 400)]
例如:
synapsesPerSegment = 3
然后
random.sample(allPositions, synapsesPerSegment)
可能会产生[(3, 300), (1,100), (2, 200)]
,因为它随机取 3 个项目allPositions
。
然后迭代它:
rx = 4
,ry = 400
rx = 1
,ry = 100
rx = 2
,ry = 200
它不是嵌套循环,它被称为元组解包。它可能会帮助您将其视为大致等同于执行此操作
for item in random.sample(allPositions, synapsesPerSegment):
rx = item[0]
ry = item[1]