函数似乎返回多个结果或:什么是隐式元组解包

2024-09-29 19:35:40 发布

您现在位置:Python中文网/ 问答频道 /正文

有人能解释一下下面的代码吗?它是某种嵌套for循环吗?如果是这样,有人可以重写它作为一个等价的嵌套for循环。allPositions参数是一个列表,synapsepersegment是一个int变量。你知道吗

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

Tags: sample代码in列表for参数randomrx
2条回答

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

(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)],因为它随机从allPositions中获取3项。你知道吗

然后迭代:

  • 迭代1:rx = 4ry = 400
  • 迭代2:rx = 1ry = 100
  • 迭代3:rx = 2ry = 200

它不是嵌套循环,它被称为元组解包。它可能会帮助你认为它大致等同于这样做

for item in random.sample(allPositions, synapsesPerSegment):
    rx = item[0]
    ry = item[1]

相关问题 更多 >

    热门问题