将字母列表转换为数字列表

时间:2018-10-21 01:39:23

标签: python arrays list numbers letter

我需要将数字列表转换为字母列表。

更具体地说,我需要阅读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

5 个答案:

答案 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]
相关问题