繁体   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