![](/img/trans.png)
[英]Adding certain numbers together in a string/list then turning then into letters
[英]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.