簡體   English   中英

將列表元素與元組列表中的元組元素匹配

[英]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]

在迭代過程中, icatlist元素的直接引用,而不是其索引。 我沒有使用ilst提取元素, 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.

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