Python计算不带s的连续值

2024-06-08 05:43:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试用Python构建两个不同的函数。你知道吗

剥离连续值:期望结果:

exampleArrray = [0,0,0,0,1,1,1,1,1,1,2,2,2,1,1,2,1,2,1,1,2,2,2,2,2,2,1,1,1,1,0,0]
strippedArray = [0,1,2,1,2,1,2,1,2,1,0] 

到目前为止,我尝试了:

def stripArray(array):
    lengthArray = len(array)
    for i in range (1,lengthArray):
        print(i)
        print(lengthArray)
        if (i<lengthArray):
            if(array[i-1] == array[i]):

                print("has been delted " + str(array[i]))   
                del(array[i])
                i = i -1
                lengthArray = lengthArray -1     
        print(array)

stripArray([0,0,0,0,1,1,1,1,1,1,2,2,2,1,1,2,1,2,1,1,2,2,2,2,2,2,1,1,1,1,0,0])

输出:[0,0,1,1,1,2,2,1,2,1,2,1,2,2,2,1,1,1,0],我可以再次循环,但我认为有更好的方法吗?你知道吗

计算连续值并联接

伪: 4x0,6x1,3x2,2x1,1x2,1x1,1x2,2x1,6x2,4x1,2x0

exampleArrray = [0,0,0,0,1,1,1,1,1,1,2,2,2,1,1,2,1,2,1,1,2,2,2,2,2,2,1,1,1,1,0,0]
   countArray = [40,61,32,21,12,11,12,21,62,41,20]

我想我需要这个条纹阵列?你知道吗

编辑:

countArray[0] = OccurencesAfterAnother*10  + stripArray[0]

解决:我们有3个完美的功能答案!谢谢大家!你的答案完全不同,我真的很喜欢!你知道吗

编辑: 感谢大家对公认答案的贡献!同样是未来的观众,有不同的解决方案,不是所有的人都需要导入,其他人都在使用numpy方法。感谢所有的贡献者!你知道吗


Tags: 方法函数答案编辑forlenifdef
3条回答

有一种方法:

from itertools import zip_longest
import numpy as np

v = [0,0,0,0,1,1,1,1,1,1,2,2,2,1,1,2,1,2,1,1,2,2,2,2,2,2,1,1,1,1,0,0]
v_arr = np.array(v)

arr_stripped = [i for i, j in zip_longest(v, v[1:]) if i != j]
# [0, 1, 2, 1, 2, 1, 2, 1, 2, 1, 0]

indices = np.hstack((np.array([-1]), np.where(v_arr[:-1] != v_arr[1:])[0], np.array([len(v_arr)-1])))
values = [indices[i+1]-indices[i] for i in range(0, len(indices)-1)]
# [4, 6, 3, 2, 1, 1, 1, 2, 6, 4, 2]

result = [int(str(v)+str(c)) for v, c in zip(values, arr_stripped)]
# [40, 61, 32, 21, 12, 11, 12, 21, 62, 41, 20]

试试这个

from itertools import groupby

count_dups = [sum(1 for lis in group) for lis, group in groupby(exampleArrray)]
strippedArray =[lis  for lis, group in groupby(exampleArrray)]
countArray= [int(str(v)+str(c)) for v, c in zip(count_dups, strippedArray)]

输出

[4, 6, 3, 2, 1, 1, 1, 2, 6, 4, 2]

[0, 1, 2, 1, 2, 1, 2, 1, 2, 1, 0]

您的stripArray可能如下所示:

def stripArray(array):
    last = None
    output = []
    for i in array:
        if i != last:
            output.append(i)
            last = i
    return output

我不懂countArray,所以我没办法。也许你应该提供更多的细节

更新:

def countArray(array):
last = None
output = []
count = 0
for i in array:
    if last is not None and i != last:
        output.append(10*count+last)
        count = 1
    else:
      count += 1
    last = i
output.append(10*count+last)
return output

相关问题 更多 >

    热门问题