gpt4 book ai didi

Python根据条件查找数组中的索引

转载 作者:太空宇宙 更新时间:2023-11-04 07:31:17 27 4
gpt4 key购买 nike

我有一个列表/数组(可以把它们变成数组,没关系):

array = [1,2,1,1,2,3,1,2,1,2,3,1,2,3,4,5]

我想创建一个 new_array来自 array看起来像这样:

new_array = [[1,2],[1],[1,2,3],[1,2],[1,2,3],[1,2,3,4,5]]

我想出的逻辑是从 a=0,b=1 开始并循环遍历 array , 当值 array[a] < array[b] , 然后 a+=1 , b+=1 , 但如果 array[a]>=array[b] 的值, 然后 append b 的值:这是我尝试过的:

index_1 = [] # This will be the list which will have the FIRST index 
index_2 = [] # This will be the list which will have the SECOND index
a = 0
b = 1
for i in array:
if i[a] < i[b]:
a = a+1
b = b+1
elif i[a] >= i[b]:
index_2.append(b)
index_1.append(a)

所以 index_1将有第一个索引和 index_2将有第二个索引,然后我们可以创建 new_array通过:

new_array = [(array[start:end]) for start,end in zip(index_1,index_2)]

不幸的是,即使我的想法是正确的,循环也停止在if i[a]<i[b]。因为IndexError: invalid index to scalar variable. .

最佳答案

我们可以通过同时形成结果的元素(更准确地说是通过一对相邻元素)直接遍历数组。

我们用数组第一个元素的子列表初始化我们的结果,然后:

  • 如果下一个元素大于前一个元素,我们将它添加到最后一个子列表
  • 否则 - 我们将包含此元素的新子列表添加到结果中。

    array = [1,2,1,1,2,3,1,2,1,2,3,1,2,3,4,5]

    new_array = [[array[0]]] # assume the array is not empty
    for a,b in zip(array, array[1:]):
    if a<b:
    new_array[-1].append(b)
    else:
    new_array.append([b])

    print(new_array)
    # [[1, 2], [1], [1, 2, 3], [1, 2], [1, 2, 3], [1, 2, 3, 4, 5]]

    更新。

    或者,我们可以用索引来实现它。
    (基于 this answer by @fortran)

    首先,准备索引来拆分数组:

    idxs_to_split = [idx for idx in range(1, len(array)) if not array[idx-1] < array[idx]]
    pairs = zip([0] + idxs_to_split, idxs_to_split + [None])

    其次,自己实现拆分:

    new_array = [array[i:j] for i,j in pairs]

    print(new_array)
    # [[1, 2], [1], [1, 2, 3], [1, 2], [1, 2, 3], [1, 2, 3, 4, 5]]
  • 关于Python根据条件查找数组中的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47170102/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com