在python中,如何根据条件将数组拆分为不相等的部分?
如果数组中的下一个元素大于第I个元素,我试图将一个数字数组分成更小的块。基本上,我有以下数组:在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 =
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]