[英]Matching list elements with element of tuple in list of tuples
我有一個包含字符串的列表:
lst = ['a', 'a', 'b']
實際上,每個字符串都是語料庫的一個類別,我需要一個與該類別的索引相對應的整數列表。
為此,我建立了一個元組列表,其中有每個(唯一)類別及其索引f.ex:
catlist = [(0, 'a'), (1, 'b')]
現在,我需要遍歷字符串的第一個列表,如果該元素與元組的第二個元素中的任何一個匹配,則將元組的第一個元素返回到數組,如下所示:
[0, 0, 1]
現在我有
catindexes = []
for item in lst:
for i in catlist:
if cat == catlist[i][i]:
catindexes.append(i)
但這顯然行不通,而且我無法解決問題。 任何提示將不勝感激。
>>> lst = ['a', 'a', 'b']
>>> catlist = [(0, 'a'), (1, 'b')]
>>> catindexes = []
>>> for item in lst:
... for i in catlist:
... if i[1] == item:
... catindexes.append(i[0])
...
>>> catindexes
[0, 0, 1]
在迭代過程中, i
是catlist
元素的直接引用,而不是其索引。 我沒有使用i
從lst
提取元素, for ... in ...
已經解決了這一問題。 由於i
是對元組的直接引用,因此我可以簡單地提取相關字段以進行匹配和追加,而無需弄亂lst
的索引。
您很接近,在迭代內部循環之后,應檢查外部循環中的項是否實際上等於tup[1]
(例如,每個tup代表(0, 'a')
或(1, 'b')
)。
如果它們相等,則只需將tup中的第一個元素( tup[0]
)附加到結果列表中。
lst = ['a', 'a', 'b']
catlist = [(0, 'a'), (1, 'b')]
catindexes = []
for item in lst:
for tup in catlist:
if item == tup[1]:
catindexes.append(tup[0])
print (catindexes)
您還可以使用列表理解:
catindexes = [tup[0] for item in lst for tup in catlist if tup[1] == item]
您可以從catlist
創建字典(我們稱其為d
)並將其反向。 現在,對於lst
每個元素i
,您正在尋找的是d[i]
:
d = {v: k for k, v in catlist}
res = [d[i] for i in lst]
輸出:
>>> lst = ['a', 'a', 'b']
>>> d = {v: k for k, v in catlist}
>>> d
{'a': 0, 'b': 1}
>>>
>>> res = [d[i] for i in lst]
>>> res
[0, 0, 1]
大名單的有效方法:
步驟1:建立好字典。
d=dict((v,k) for (k,v) in catlist)
第2步:使用它。
[d[k] for k in lst]
這樣,執行時間將像len(lst) + len(catlist)
一樣增長,而不是len(lst) x len(catlist)
。
我建議為您的catlist
使用字典 。 我認為它更自然地適合您要執行的操作:
lst = ['a', 'a', 'b']
catdict = {'a': 0, 'b': 1}
res = [catdict[k] for k in lst] # res = [0, 0, 1]
條件定義塊是否不正確。
嘗試這個..
lst = ['a', 'a', 'b']
catlist = [(0, 'a'), (1, 'b')]
catindexes = []
for item in lst:
for i in catlist:
if i[1]==item:
catindexes.append(i[0]);
print catindexes
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.