Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于发生顺序在Python中对列表进行编码_Python_Numpy - Fatal编程技术网

基于发生顺序在Python中对列表进行编码

基于发生顺序在Python中对列表进行编码,python,numpy,Python,Numpy,我有一张这样的清单 ['A','A','B','A+B','A+B','B','B','B','A'] 我想把这个列表转换成这样 [1,1,2,2,3,3,4,4,5] 我所做的是,我将从value1开始,当列表中的值发生变化时,我将把手头的值增加1 这是我现在使用的代码 counts = [] count = 1 for i in range(1, len(p)): print(p[i-1], p[i]) if p[i-1] == p[i]: counts.a

我有一张这样的清单

['A','A','B','A+B','A+B','B','B','B','A']

我想把这个列表转换成这样

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

我所做的是,我将从value
1开始,当列表中的值发生变化时,我将把手头的值增加1

这是我现在使用的代码

counts = []
count = 1

for i in range(1, len(p)):
    print(p[i-1], p[i])
    if p[i-1] == p[i]:
        counts.append(count)
    else:
        counts.append(count)
        count += 1

if p[-2] == p[-1]:
    counts.append(counts[-1])
else:
    counts.append(counts[-1] + 1)

如何在Python中高效地执行此操作。?如果有必要,我也可以使用numpy。这是一种使用numpy的简单方法:

import numpy as np

data = np.array(['A', 'A', 'B', 'B', 'A+B', 'A+B', 'B', 'B', 'A'])
result = np.concatenate([[1], 1 + np.cumsum(data[:-1] != data[1:])])
print(result)
# [1 1 2 2 3 3 4 4 5]
或与熊猫一起:

import pandas as pd

data = pd.Series(['A', 'A', 'B', 'B', 'A+B', 'A+B', 'B', 'B', 'A'])
result = data.ne(data.shift(1)).cumsum()
print(result)
# 0    1
# 1    1
# 2    2
# 3    2
# 4    3
# 5    3
# 6    4
# 7    4
# 8    5
# dtype: int32