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

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

如何在Python的嵌套列表中標記匹配項

如何在Python的嵌套列表中標記匹配項

慕容708150 2021-04-08 14:15:45
此處是Python的新手。我目前有一個嵌套列表的列表。我正在嘗試標記每個從0-25開始的子列表。但是,如果兩個子列表相同,則它們應具有相同的標簽。例如:label_list = [['AH0'], ['AA1', 'K', 'S'], ['AH0', 'N', 'T'], ['AA1', 'K', 'S'], ['IH0', 'N'], ['AA1', 'K', 'S']]輸出應為 [0, 1, 2, 1, 4, 1]因為第二,第四和第六個子列表是相同的。其余子列表應僅以連續的數字順序標記。我知道我需要使用一個循環,但是我很困惑,任何人都對如何解決這個問題有任何建議?謝謝你。
查看完整描述

2 回答

?
慕的地8271018

TA貢獻1796條經驗 獲得超4個贊

您可以使用字典:


label_list = [['AH0'], ['AA1', 'K', 'S'], ['AH0', 'N', 'T'], ['AA1', 'K', 'S'], ['IH0', 'N'], ['AA1', 'K', 'S']] 

count = 0

d = {}

for i in label_list:

  if tuple(i) not in d:

    d[tuple(i)] = count

  count += 1


final_result = [d[tuple(i)] for i in label_list]

輸出:


[0, 1, 2, 1, 4, 1]

編輯:上面的解決方案假定標簽是根據唯一值的首次出現的索引生成的。但是,如果需要一般的增量,并且要根據看到的唯一元素的數量創建標簽,則count可以在for循環內移動它:


if tuple(i) not in d:

  d[tuple(i)] = count

  count += 1

然后,輸出為[0, 1, 2, 1, 3, 1]。


列表理解也可以使用,盡管效率不高:


c = iter(range(len(label_list)))

new_d = {tuple(a):i for i, a in reversed(list(enumerate(label_list)))}

final_result = [next(c) if a not in label_list[:i] else new_d[tuple(a)] for i, a in enumerate(label_list)]

輸出:


[0, 1, 2, 1, 3, 1]


查看完整回答
反對 回復 2021-04-27
?
素胚勾勒不出你

TA貢獻1827條經驗 獲得超9個贊

這是一個單線,只是為了好玩:

 [dict( map( reversed, enumerate( set( map(tuple, label_list)))))[tuple(item)] for item in label_list]

不利的一面(除了難以理解之外)是,它創建字典的次數與label_list中項目的次數相同。

要解釋它是如何工作的,請從內而外閱讀它:

map(tuple, label_list) 將tuple函數應用(或“映射”)元組函數到label_list的每個元素,以便以后每個元素都可以用作字典中的鍵(python列表不能是字典鍵)

set( map(tuple, label_list)) 在label_list中創建一組所有唯一元素,這是我們需要的,因為您希望每個唯一條目都具有唯一標簽

enumerate( set( map(tuple, label_list)))枚舉是一個將某些列表作為輸入并為列表的每個元素返回唯一(按順序)整數的函數。因此,您得到的是這樣的元組列表[[0,element_0),(1,element_1)...]

map( reversed, enumerate( set( map(tuple, label_list))))這會顛倒上面列表中的元素,因此當我們在下一步中創建字典時,元素將是鍵而不是整數。因此我們得到[[element_0,0),(element_1,0)...]

dict( map( reversed, enumerate( set( map(tuple, label_list)))))只需獲取上一步中的元組列表并從中創建一個字典,就可以像訪問其他任何字典一樣使用它們的鍵(即使用dictionary[element]語法)。

該行的其余部分與其他任何列表理解一樣。它遍歷您的原始label_list并訪問我們創建的字典以獲得與每個元素關聯的唯一編號。


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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