亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Python:將字符串“鍵”列表枚舉為整數

Python:將字符串“鍵”列表枚舉為整數

料青山看我應如是 2021-03-30 12:19:18
我搜索了一段時間,但沒有找到任何能確切解釋我正在嘗試做的事情。基本上,我有一個字符串“標簽”的列表,例如[“棕色”,“黑色”,“藍色”,“棕色”,“棕色”,“黑色”]等。我要做的就是將其轉換為列表整數,每個標簽對應一個整數,所以["brown", "black", "blue", "brown", "brown", "black"]變成[1, 2, 3, 1, 1, 2]我查看了枚舉函數,但是當我給它我的字符串列表(很長)時,它為每個單獨的標簽分配了一個int,而不是給同一標簽相同的int:[(1,"brown"),(2,"black"),(3,"blue"),(4,"brown"),(5,"brown"),(6,"black")]我知道如何通過冗長且繁瑣的for循環和if-else檢查來做到這一點,但我真的很好奇是否有一種更優雅的方法可以僅在一行或兩行中執行此操作。
查看完整描述

3 回答

?
www說

TA貢獻1775條經驗 獲得超8個贊

您有不唯一的標簽;您可以使用defaultdict來在首次訪問時結合計數器生成數字:


from collections import defaultdict

from itertools import count

from functools import partial


label_to_number = defaultdict(partial(next, count(1)))

[(label_to_number[label], label) for label in labels]

這會按照標簽中第一個出現的順序生成一個計數labels。


演示:


>>> labels = ["brown", "black", "blue", "brown", "brown", "black"]

>>> label_to_number = defaultdict(partial(next, count(1)))

>>> [(label_to_number[label], label) for label in labels]

[(1, 'brown'), (2, 'black'), (3, 'blue'), (1, 'brown'), (1, 'brown'), (2, 'black')]

因為我們使用的是字典,所以標簽到數字的查找成本是恒定的,因此整個操作將基于labels列表的長度花費線性時間。


或者,使用aset()獲取唯一值,然后將它們映射到一個enumerate()計數:


label_to_number = {label: i for i, label in enumerate(set(labels), 1)}

[(label_to_number[label], label) for label in labels]

由于set()對象沒有排序,因此可以更隨意地分配數字:


>>> label_to_number = {label: i for i, label in enumerate(set(labels), 1)}

>>> [(label_to_number[label], label) for label in labels]

[(2, 'brown'), (3, 'black'), (1, 'blue'), (2, 'brown'), (2, 'brown'), (3, 'black')]

但是,這需要循環labels兩次。


兩種方法都不需要您先定義標簽字典;映射是自動創建的。


查看完整回答
反對 回復 2021-04-02
?
汪汪一只貓

TA貢獻1898條經驗 獲得超8個贊

您可以先創建一個字典,例如:


dict = {"brown":1 , "black": 2, "blue": 3 }

進而:


li = ["brown", "black", "blue", "brown", "brown", "black"]

[dict[i] for i in li]


查看完整回答
反對 回復 2021-04-02
?
ITMISS

TA貢獻1871條經驗 獲得超8個贊

嘗試這個:


lst = ["brown", "black", "blue", "brown", "brown", "black"]

d = {"brown":1, "black":2, "blue":3}


[d[k] for k in lst]

=> [1, 2, 3, 1, 1, 2]

當然,要使其正常工作,您必須在某處定義等效項-上面,我為此使用了字典。否則,無法知道棕色對應于數字1,以此類推。


查看完整回答
反對 回復 2021-04-02
  • 3 回答
  • 0 關注
  • 233 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號