Python:如何从小到大找到一系列索引?

时间:2018-03-27 20:38:42

标签: python arrays list output

我有2个数组。首先是行数组。第二个是缩进数组(想想Word文档中的缩进文本)

1。
[' 1',' 2',' 3',' 4',' 5',' 6',' 7',' 8',' 9',' 10']

2.
[' 1',' 2',' 3',' 1',' 2',' 2',' 2',' 2',' 1',' 2']

我正在努力寻找一系列变量,从较小的数字到下一个较大的变量。

我想要的输出是

  1. ' 1',' 2',' 3'
  2. ' 1',' 2',' 3'
  3. 另外,

    1. ' 4',' 5',' 6',' 7',' 8'
    2. ' 1',' 2',' 2',' 2',' 2'
    3. 我想保存当下一个数字小于前一个时停止的数组的索引。

      例如arraySaved = [[' 1',' 3'],[' 4',' 8'] [&# 39; 9',' 10']]

      我不断发现索引错误'并且保存的索引没有反映正确的范围

      Code I尝试过:

      num = 0 
      arrayOfIndexes = []
      for x in range(0, len(array1)):
          small= array2[int(num)]
          num = int(num)+1
          big = array2[int(num)]
      
          if(big - num <=0): 
             arrayOfIndexes.append(num)
      

1 个答案:

答案 0 :(得分:1)

如果我正确地解释了你的问题,我相信这可以实现你想要的东西:

indents = ['1', '2', '3', '1', '2', '2', '2', '2', '1', '2']

arraySaved = []; temp = [0] #Initialize temporary list
for idx, i in enumerate(indents):
    if idx==len(indents)-1:
        temp.append(idx)
        arraySaved.append(temp) #Reached end of list
    elif indents[idx+1]<i: #Ending index of temporary list
        temp.append(idx)
        arraySaved.append(temp) #Store temporary list
        temp = []; temp.append(idx+1) #Reset temporary list and begin new one

print(arraySaved)

收率:

[[0, 2], [3, 7], [8, 9]]

请记住,在分成单独增加的缩进计数后,所需的输出是行索引的上限和下限。因此,您实际上不需要列表rows,因为您可以枚举列表indents。如果你记住Python索引从0开始,而不是1,那么上面的答案就相当于你想要的输出。

如果您真的想要从1开始索引的行号,那么我会补充一点,那么您可以执行以下操作:

arraySaved = [[i+1 for i in j] for j in arraySaved]

给出:

[[2, 3], [4, 8], [9, 10]]

<强>解释

temp只是一个列表,用于临时存储indents中值的索引,这些索引对应于最终存储在arraySaved中的每个单独输出列表的起始和结束索引。我们还需要使用列表的第一个索引初始化temp,即0

for idx, i in enumerate(indents):只是循环遍历列表indents内的值,其中enumerate也会解压缩列表中值的索引

第一个if语句考虑了循环中当前索引是列表中最后一个索引的情况,因为idx+1将超过正在迭代的列表的维度。如果满足if语句中的任一条件,则当前索引存储在temp变量中。如果满足结束索引条件,则temp列表会在附加到arraySaved后重置。

希望有所帮助!