1

有人可以解释以下代码行吗?它是某种嵌套的for循环吗?如果是这样,有人可以将其重写为等效的嵌套 for 循环。allPositions 参数是一个列表, synapsesPerSegment 是一个 int 变量。

for rx,ry in random.sample(allPositions, synapsesPerSegment):
4

2 回答 2

6

这是一个正常的循环。没有嵌套。random.sample从 中返回一个元素列表,allPositions其中包含synapsesPerSegment许多项。由于在 for 循环中分配给的变量是 form 中的元组(rx, ry),这表明它allPositions是 form 中元组的列表(或集合),(rx, ry)它们被分配给每次迭代。如果您有一个元组列表,则 for 循环每次迭代都会将它们“解包”到这些变量中。例如,如果您有rxry

(a, b) = (99, 100)

那么这个分配将解包:

(c, d) = (a, b)

所以c == 99d == 100

回到这个问题,这里有一些示例数据:

如果我们说: allPositions = [(1,100), (2, 200), (3, 300), (4, 400)]

例如: synapsesPerSegment = 3

然后 random.sample(allPositions, synapsesPerSegment)可能会产生[(3, 300), (1,100), (2, 200)],因为它随机取 3 个项目allPositions

然后迭代它:

  • 迭代 1: rx = 4,ry = 400
  • 迭代 2: rx = 1,ry = 100
  • 迭代 3: rx = 2,ry = 200
于 2012-08-08T22:52:33.687 回答
1

它不是嵌套循环,它被称为元组解包。它可能会帮助您将其视为大致等同于执行此操作

for item in random.sample(allPositions, synapsesPerSegment):
    rx = item[0]
    ry = item[1]
于 2012-08-08T23:03:49.683 回答