枚举列表和排序列表

时间:2018-07-12 00:32:56

标签: python list

我正在在线上学习教程,无法理解代码的作用。

在这里,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]])

1 个答案:

答案 0 :(得分:2)

好的,让我们逐行介绍。

  1. 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在这种情况下)

  2. for i in enumerate(questions_int):使i等于(索引,元素)的元组,这意味着len(i[1])将是第i个问题的长度。随着length的价值从一个增加,最短的问题和答案将逐渐添加到列表中,因此append(在第二个for循环中调用

  3. sorted_questions.append(questions_int[i[0]])行将在当前索引len(i[1])==length处附加问题。请记住,我是2个元素的元组,第一个是当前问题的索引。所以questions_int[i[0]]是长度为length的问题。

  4. 类似地,answers_int[i[0]]是对应于该问题的答案。因此,只要我们使用if条件发现一个稍长的问题,列表sorted_answers的新答案就会加长1,而sorted_questions也是如此

无论您在哪里困惑,都请问一个后续问题