我有一个字符串列表。我想为每个字符串分配一个唯一的数字(确切的数字并不重要),并使用这些数字按顺序创建一个相同长度的列表。以下是我最好的尝试,但我不满意有两个原因:
它假定相同的值彼此相邻
我必须以
0
开始列表,否则输出将不正确
我的代码:
names = ['ll', 'll', 'll', 'hl', 'hl', 'hl', 'LL', 'LL', 'LL', 'HL', 'HL', 'HL']
numbers = [0]
num = 0
for item in range(len(names)):
if item == len(names) - 1:
break
elif names[item] == names[item+1]:
numbers.append(num)
else:
num = num + 1
numbers.append(num)
print(numbers)
我想让代码更通用,这样它就可以处理未知列表。有任何想法吗?
原文由 millsy 发布,翻译遵循 CC BY-SA 4.0 许可协议
如果不使用外部库(检查 EDIT 中的
Pandas
解决方案),您可以按如下方式进行:简要说明:
在第一行中,您为列表中的每个唯一元素分配一个数字(存储在字典中
d
;您可以使用字典理解轻松创建它;set
返回唯一元素names
)。然后,在第二行中,您进行列表理解并将实际数字存储在列表中
numbers
。一个例子来说明它也适用于未排序的列表:
这是
numbers
的输出:如您所见,与
1
ll
出现在正确的位置。编辑
如果你有 Pandas 可用,你也可以使用
pandas.factorize
(这对于大列表来说似乎非常有效,并且对于元组列表也可以正常工作,如此 处 所述):然后会返回
所以,