python循环多个值/对象?在'in'之后

2024-04-20 11:37:37 发布

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

我搞不清语法是这样做的:

for n, id_ in tqdm(enumerate(test_ids), total=len(test_ids)):

我在一个Kaggle内核里找到的。我尝试尽可能多地搜索解决方案,但找不到任何python for循环的示例或解释,在for循环的“in”后面有多个逗号分隔的值。既然我不知道这叫什么,我也不知道还能找什么。在

这是整个代码块:

^{pr2}$

这是代码来自的内核:https://www.kaggle.com/keegil/keras-u-net-starter-lb-0-277?scriptVersionId=2164855


Tags: 代码intestidids示例forlen
2条回答

您可以在^{cd1}循环中使用多个逗号分隔元素来实现iteable,但这不是这里发生的。在^{cd2>}之后,只有一件事,一个函数调用恰好包含两个参数。

与此情况相比:

for x in range(0, 10):

此处右侧没有两个逗号分隔的值^{{cd3>}和^{cd4>},只有一个^{cd5>}。


如果右侧有两个或多个逗号分隔值,那么会怎样?那么这只是元组:

^{pr2}$

它与^{cd6>}中的元组完全相同。


在您的情况下,使事情稍微复杂一些的是,正在解包任何^{{cd7}返回的各个元素。(在这种情况下,它会生成传入的任何内容,并且由于您传入了^{cd8>},因此每个元素都是索引值对。)因此,^{{cd2>}左侧有两个逗号分隔的目标。

但是这是一个完全独立的问题,您可以通过简单的列表来进行复制,以循环:

^{pr3}$

解包与分配中的相同:

^{pr4}$

在for循环中发生的事情称为解压缩和压缩。你可以忽略tqdm函数,因为如果你要删除它,唯一不同的是你看不到加载条,但其他一切都可以正常工作。这个代码

for n, id_ in tqdm(enumerate(test_ids), total=len(test_ids)):

工作原理与没有负载杆一样。在

^{pr2}$

enumerate所做的是将每个项的索引号放入数组的新维度中给定的元组中。因此,如果数组输入是1D,那么输出数组将是2D,一维是索引,另一维是值。 假设你的测试id是[(2321),(2324),(23213)]现在使用enumerate这个列表现在看起来像是[(0,2321),(1,2324),(2,23213)]放逗号所做的是一旦给了一个值(从我们的for循环中来看)比如(02321)是按照给定的顺序将每个元组值分开,所以在这个例子中它们将等于n=0和id=2321

相关问题 更多 >