我需要将数字列表转换为字母列表。
更具体地说,我需要阅读PZ
并将其变成PZx
,以便出现在PZ
中的第一个不同字母在PZx
中采用数字{{1 }},第二个不同的字母采用数字1
,第三个不同的字母采用数字2
,第四个不同的字母采用数字3
。示例:
4
我需要编写一个函数,根据此规则将任何给定的PZ = ['R','O','B','O','R','R','B','G','O','G','B','G']
PZx = [1,2,3,2,1,1,3,4,2,4,3,4]
转换为PZ
。
答案 0 :(得分:2)
您可以使用文档中的字典和setdefault:
如果key在字典中,则返回其值。如果没有,请插入 默认值,然后返回默认值。默认默认为无。
代码:
PZ = ['R','O','B','O','R','R','B','G','O','G','B','G']
uniques = {}
PZx = [uniques.setdefault(l, len(uniques) + 1) for l in PZ]
print(PZx)
输出
[1, 2, 3, 2, 1, 1, 3, 4, 2, 4, 3, 4]
答案 1 :(得分:1)
我认为您可以使用list index并具有一个简单的循环
occured = []
for item in PZ:
if item not in occured:
occured.append(item)
PZx.append(occured.index(item) + 1)
答案 2 :(得分:0)
In [1]: PZ = ['R','O','B','O','R','R','B','G','O','G','B','G']
In [2]: d = {}
In [3]: PZx = []
In [4]: n = 1
In [5]: for x in PZ:
...: if x not in d:
...: d[x] = n
...: n += 1
...: PZx += [d[x]]
...:
In [6]: PZx
Out[6]: [1, 2, 3, 2, 1, 1, 3, 4, 2, 4, 3, 4]
答案 3 :(得分:0)
使用字典可以轻松完成此操作。尝试这样的事情。
PZ = ['R','O','B','O','R','R','B','G','O','G','B','G']
PZx = []
dict = {}
count = 1
for letter in PZ:
if letter not in dict.keys():
dict[letter] = count
PZx.append(dict[letter])
count+=1
else:
PZx.append(dict[letter])
现在PZx
应该等于[1,2,3,2,1,1,3,4,2,4,3,4]
答案 4 :(得分:0)
使用熊猫和列表理解的另一种方法:
import pandas as pd
PZ = ['R', 'O', 'B', 'O', 'R', 'R', 'B', 'G', 'O', 'G', 'B', 'G']
PZ_unique = pd.unique(PZ).tolist() # ['R', 'O', 'B', 'G']
PZx = [PZ_unique.index(pz) + 1 for pz in PZ] # [1, 2, 3, 2, 1, 1, 3, 4, 2, 4, 3, 4]