获取"列出索引超出范围"试图创建从之前的列表中添加的2d列表

时间:2017-11-05 01:34:54

标签: python list nested-lists

基本上,我需要创建一个基于a-list-of-sublists / nested-lists的值的钟形三角形,这些列表是从给定的"行"的参数创建的。我自己会担心铃声的格式,但是我很难想出生成嵌套列表的逻辑。我对python语法不太熟悉。

所以我需要这样做,以便列表 rtable 中每个子列表的第一个元素(第一个子列表除外,第一个子列表/行总是只有[1])是最后一个元素在上一个子列表中,该子列表中的每个后续值都是前一个索引的值和与当前子列表具有相同索引的前一个子列表的值之和。所以如果参数是3行,它看起来像

  

1
  1 2
  2 3 5

或列表看起来像

  

[[1],[1,2],[2,3,5]]

这是我到目前为止所得到的:

def create_list(num_rows):
    rtable = []
    rtable.append([1])

    if num_rows > 1:
        rtable.append([1])

    for i in range(num_rows):
        for j in range(i + 1):
            if i != 0 and j == 0:
                rtable[i].append(rtable[i - 1][-1]) # error here
            else:
                rtable[i].append(rtable[i - 1][j - 1] + rtable[i][j - 1])

    return rtable

如果param超过1行,则第一个if语句存在以启动第二行,因为我知道这是从第二行开始的。第二个if-存在,如果它不在第一个子列表中,那么它就会附加,而这里不再需要添加任何内容。超出范围的错误发生在if-下面的那一行。我不确定为什么我会超出范围,因为我确保只有当它所在的子列表不是第一个/第0个子列表时才会附加,这意味着它只会运行如果它位于第二个和最后一个子列表之间的子列表中,它可以返回并查看上一个子列表,而不是超出范围。我也使用[-1]来访问列表的最后一个元素,因为我了解到如何访问列表的最后一个元素。所以不确定这里有什么问题。任何帮助将不胜感激

2 个答案:

答案 0 :(得分:1)

这对我有用

def create_list(num_rows):
    r = [[1]]                         # init 0_th row with 1
    for i in range(1, num_rows):      # add num_rows - 1 new rows
        r.append([r[i-1][-1]])        # init new row/list with last element of previous
        for n in r[i-1]:              # get each successive n from previous row
           r[i].append(r[i][-1] + n)  # add each n to the previous num in current row, append 
    return r


create_list(6)

[[1],
 [1, 2],
 [2, 3, 5],
 [5, 7, 10, 15],
 [15, 20, 27, 37, 52],
 [52, 67, 87, 114, 151, 203]]

wii对debug print语句的注释应该有助于您的代码

答案 1 :(得分:0)

你可以试试这个:

def triangle(n):
   first = 0
   second = 1
   count = 0
   l = [second]
   for i in range(1, n):
      current_list = []
      for b in range(i-1):
           if count%2 == 0:
               current_list.append(second)
           else:
               current_list.append(first)
           temp1 = second
           second += first
           first = temp1
       l.append(current_list)
       count += 1
   return l


final_data = triangle(5)
new_final_data = [final_data[0]]+final_data[3:]
print(new_final_data)

输出:

[[1], [1, 2], [2, 3, 5]]