【问题标题】:Python: how to find a range of indexes from small to large?Python:如何找到从小到大的索引范围?
【发布时间】:2018-03-27 20:38:41
【问题描述】:

我有 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”

还有,

  1. “4”、“5”、“6”、“7”、“8”
  2. '1'、'2'、'2'、'2'、'2'

我想保存下一个数字小于前一个数字时停止的数组的索引。

如arraySaved = [['1', '3'],['4', '8']['9', '10']]

我不断收到“超出索引错误”并且保存的索引没有反映正确的范围

我试过的代码:

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)

【问题讨论】:

  • 您似乎希望我们为您编写一些代码。虽然许多用户愿意为陷入困境的编码人员编写代码,但他们通常只有在发布者已经尝试自己解决问题时才会提供帮助。展示这项工作的一个好方法是包含您迄今为止编写的代码、示例输入(如果有的话)、预期输出以及您实际获得的输出(控制台输出、回溯等)。您提供的详细信息越多,您可能收到的答案就越多。检查FAQHow to Ask
  • 为什么输出中不包含'9', '10' '1', '2'
  • “我正在努力寻找一系列变量,从一个小数字到下一个更大的数字。”真是模棱两可。据我了解,您想根据 list_2 中的下一个值何时小于前一个值来对 list_1 和 list_2 进行切片? (注意,在您的示例中它们都是字符串,而不是整数)。您可以使用 for 循环开始,非常合乎逻辑地执行此操作,请展示您的尝试。
  • 第一个列表真的有什么影响吗?
  • @MooingRawr 好的,添加了一些代码

标签: python arrays list output


【解决方案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 后将被重置。

希望有帮助!

【讨论】:

  • 哇!谢谢你。那效果很好。惊人的。您能否将我链接到解释您的答案的教程?
  • 我的答案没有正式的教程,所以我在上面提供了解释。如果您觉得这回答了您的问题,请点击绿色复选标记接受我的回答!
猜你喜欢
  • 1970-01-01
  • 2020-04-26
  • 2015-08-31
  • 1970-01-01
  • 2019-06-25
  • 2020-12-23
  • 2020-09-03
  • 2018-07-27
  • 1970-01-01
相关资源
最近更新 更多