我有这样的列表
['A', 'A', 'B', 'B', 'A+B', 'A+B', 'B', 'B', 'A']
我想将此列表转换为喜欢此
[1, 1, 2, 2, 3, 3, 4, 4, 5]
我所做的是,我将从值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]
或pandas:
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