簡體   English   中英

將字母列表轉換為數字列表

[英]Turning a list of letters into a list of numbers

我需要將數字列表轉換為字母列表。

更具體地說,我需要閱讀PZ並將其轉換為PZx ,以便出現在PZ中的第一個不同的字母在PZx中假設數字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轉換為PZx

您可以從文檔中使用字典和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]

我認為您可以使用列表索引並有一個像這樣的簡單循環

occured = []
for item in PZ:
    if item not in occured:
        occured.append(item)
    PZx.append(occured.index(item) + 1)
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]

使用字典可以輕松做到這一點。 嘗試這樣的事情。

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]

使用熊貓和列表理解的另一種方法:

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]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM