在python中,如何根据条件将数组拆分为不相等的部分?

在python中,如何根据条件将数组拆分为不相等的部分?,python,arrays,numpy,split,conditional-statements,Python,Arrays,Numpy,Split,Conditional Statements,如果数组中的下一个元素大于第I个元素,我试图将一个数字数组分成更小的块。基本上,我有以下数组: a=[97122、98111、98111、98111、98101、101、103、103、104、97107、107、108] 我想得到以下子数组: a1 = [97, 122] a2 = [98, 111] a3 = [98, 111] a4 = [98, 101, 101, 103, 103, 104] 依此类推……您可以对当前、下一个对进行迭代,并在条件下停止当前值或将其添加到当前值中 a =

如果数组中的下一个元素大于第I个元素,我试图将一个数字数组分成更小的块。基本上,我有以下数组:

a=[97122、98111、98111、98111、98101、101、103、103、104、97107、107、108]

我想得到以下子数组:

a1 = [97, 122]
a2 = [98, 111]
a3 = [98, 111]
a4 = [98, 101, 101, 103, 103, 104]

依此类推……

您可以对当前、下一个对进行迭代,并在条件下停止当前值或将其添加到当前值中

a = [97, 122, 98, 111, 98, 111, 98, 101, 101, 103, 103, 104, 97, 107, 107, 108]
result = []
values = [a[0]]
for current_v, next_v in zip(a, a[1:]):
    if next_v < current_v:
        result.append(values)
        values = [next_v]
    else:
        values.append(next_v)
result.append(values)
print(result)  # [[97, 122], [98, 111], [98, 111], [98, 101, 101, 103, 103, 104], [97, 107, 107, 108]]
a=[9712298111981119810110310310497107108]
结果=[]
值=[a[0]]
对于当前_v,zip中的下一个_v(a,a[1:]):
如果下一个_v<当前_v:
result.append(值)
值=[下一步]
其他:
值。追加(下一步)
result.append(值)
打印(结果)#[[97122]、[98111]、[98111]、[98101101、103、103、104]、[97107107、108]]

这与@azro solution略有不同,但在概念上是相同的。 如果
条件有效,则使用tmp累加数字,直到
条件有效为止,否则将
tmp
附加到
结果
,并启动一个包含当前数字的新
tmp

a = [97, 122, 98, 111, 98, 111, 98, 101, 101, 103, 103, 104, 97, 107, 107, 108]

result = []
tmp = []
for i, n in enumerate(a):
    if i == 0 or n >= a[i-1]:
        tmp.append(n)
    else:
        result.append(tmp)
        tmp = [n]
result.append(tmp)

print(result)
[[97, 122], [98, 111], [98, 111], [98, 101, 101, 103, 103, 104], [97, 107, 107, 108]]

我会这样做:

        a = [97, 122, 98, 111, 98, 111, 98, 101, 101, 103, 103, 104, 97, 107, 107, 108]
        i, result = 0, []

        while i < len(a):
            row = [a[i]]
            j = i
            while j+1 < len(a) and a[j+1] >= a[j]:
                row.append(a[j+1])
                j += 1
            i = j + 1
            result.append(row)

        return result
a=[9712298111981119810110310310497107108]
i、 结果=0,[]
而我=a[j]:
行追加(a[j+1])
j+=1
i=j+1
结果.追加(行)
返回结果

您只需遍历一次所有值,就可以将其清除。

您可以使用numpy.where和numpy.split来拆分数组。使用numpy的优点是可以避免显式循环,使执行速度更快(特别是对于大型数组)

输出:

[ 97 122] [ 98 111] [ 98 111] [ 98 101 101 103 103 104] [ 97 107 107 108]

到目前为止你尝试了什么?你申请了什么条件?伙计们,非常感谢你们,我是新来的谢谢你们的支持!你能用口头或伪代码解释一下算法的作用吗?具体来说,我没有看到代码在哪里启动了一个新的tmp,谢谢。我是python新手,你能解释一下代码的作用吗?这似乎是一个简单而优雅的解决方案。idx行将数组偏移1,并将元素i与元素i+1进行比较(生成一个真/假元素数组)。np.where函数仅选择元素索引,其中第i个元素大于下一个元素(条件为真)。a1行使用np.split根据索引将数组a分解为多个数组。
[ 97 122] [ 98 111] [ 98 111] [ 98 101 101 103 103 104] [ 97 107 107 108]