我有2个数组。首先是行数组。第二个是缩进数组(想想Word文档中的缩进文本)
1。
[' 1',' 2',' 3',' 4',' 5',' 6',' 7',' 8',' 9',' 10']
2.
[' 1',' 2',' 3',' 1',' 2',' 2',' 2',' 2',' 1',' 2']
我正在努力寻找一系列变量,从较小的数字到下一个较大的变量。
我想要的输出是
另外,
我想保存当下一个数字小于前一个时停止的数组的索引。
例如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)
答案 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
后重置。
希望有所帮助!