我正在在线上学习教程,无法理解代码的作用。
在这里,questions_int是包含以下格式的数字的列表的列表:
[[7214,1596,2353,4125,3214], [1234,2345,3252,4235], ..... , [4234,5378,4234,5235]]
目标是按问题的长度对问题进行排序,以减少训练序列2序列模型数据时的填充时间。但是我不明白代码的工作原理以及如何帮助按长度排序。
max_line_length = 20
sorted_questions = []
sorted_answers = []
for length in range(1, max_line_length+1):
for i in enumerate(questions_int):
if len(i[1]) == length:
sorted_questions.append(questions_int[i[0]])
sorted_answers.append(answers_int[i[0]])
答案 0 :(得分:2)
好的,让我们逐行介绍。
for length in range(1, max_line_length+1):
从1迭代到max_line_length。这意味着length
首先将等于1
,然后在循环结束时length
将等于2
,依此类推,直到length is finally equal to
max_line_length`(20在这种情况下)
for i in enumerate(questions_int):
使i等于(索引,元素)的元组,这意味着len(i[1])
将是第i个问题的长度。随着length
的价值从一个增加,最短的问题和答案将逐渐添加到列表中,因此append(
在第二个for循环中调用
第sorted_questions.append(questions_int[i[0]])
行将在当前索引len(i[1])==length
处附加问题。请记住,我是2个元素的元组,第一个是当前问题的索引。所以questions_int[i[0]]
是长度为length
的问题。
类似地,answers_int[i[0]]
是对应于该问题的答案。因此,只要我们使用if
条件发现一个稍长的问题,列表sorted_answers
的新答案就会加长1,而sorted_questions
也是如此
无论您在哪里困惑,都请问一个后续问题