我搞不清语法是这样做的:
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
您可以在^{cd1}循环中使用多个逗号分隔元素来实现iteable,但这不是这里发生的。在^{cd2>}之后,只有一件事,一个函数调用恰好包含两个参数。
与此情况相比:
此处右侧没有两个逗号分隔的值^{{cd3>}和^{cd4>},只有一个^{cd5>}。
如果右侧有两个或多个逗号分隔值,那么会怎样?那么这只是元组:
^{pr2}$它与^{cd6>}中的元组完全相同。
在您的情况下,使事情稍微复杂一些的是,正在解包任何^{{cd7}返回的各个元素。(在这种情况下,它会生成传入的任何内容,并且由于您传入了^{cd8>},因此每个元素都是索引值对。)因此,^{{cd2>}左侧有两个逗号分隔的目标。
但是这是一个完全独立的问题,您可以通过简单的列表来进行复制,以循环:
^{pr3}$解包与分配中的相同:
^{pr4}$在for循环中发生的事情称为解压缩和压缩。你可以忽略tqdm函数,因为如果你要删除它,唯一不同的是你看不到加载条,但其他一切都可以正常工作。这个代码
工作原理与没有负载杆一样。在
^{pr2}$enumerate所做的是将每个项的索引号放入数组的新维度中给定的元组中。因此,如果数组输入是1D,那么输出数组将是2D,一维是索引,另一维是值。 假设你的测试id是
[(2321),(2324),(23213)]
现在使用enumerate这个列表现在看起来像是[(0,2321),(1,2324),(2,23213)]
放逗号所做的是一旦给了一个值(从我们的for循环中来看)比如(02321)是按照给定的顺序将每个元组值分开,所以在这个例子中它们将等于n=0和id=2321相关问题 更多 >
编程相关推荐