用零填充从比较中获得的列表

时间:2013-08-20 14:50:01

标签: python list python-2.7

我有一个接收3个列表的函数:

DOC1:

[['ser', 'VSIS3S0', 1], ['francisco_villa', 'NP00000', 2], ['norte', 'NCMS000', 1], ['revolucion_mexicana', 'NP00000', 1], ['nombrar', 'VMP00SM', 1], ['centauro', 'NCMS000', 1]]

DOC2:

[['pintor', 'NCMS000', 1], ['ser', 'VSIS3S0', 1], ['muralista', 'AQ0CS0', 1], ['diego_rivera', 'NP00000', 1], ['frida_kahlo', 'NP00000', 1], ['caso', 'NCMS000', 1]]

CONSULTA:

[['ser', 'VSIP3S0', 1], ['francisco_villa', 'NP00000', 1], ['quien', 'NP00000', 1]]

功能:

def vectores(doc1,doc2,consulta):
res=[]
l1=[]
cont = 0
r = doc1 + doc2 + consulta
for i in r:
    l1.append(i[0])
for e in doc1:
    if e[0] in l1:
        res.append(e[2])
    else:
        res.append(e[0]==0 * len(l1))
return res

[1, 2, 1, 1, 1, 1] -> res

我需要比较doc1的key [0]是否存在于l1的key [0]中,如果是这样的话,将key [2]附加到res列表,如果它们不匹配,则追加零到res list使用lenght l1

构建矢量

我希望获得这样的输出:[1, 2, 1, 1, 1, 1, 0, 0, 0, ...]

- 输出向量的元素是列表的键[2]值。 - 零将是doc1的单词不在l1中。 - 一旦我有了欲望输出,我也想用doc2和consulta重复相同的程序。

提前谢谢! ;)

2 个答案:

答案 0 :(得分:0)

嗯,我认为应该这样做,因为顺序无关紧要:

def vectores(doc1,doc2,consulta):
res=[]
l1=[]
cont = 0
r = doc1 + doc2 + consulta
for i in r:
    l1.append(i[0])
    res.append(0) #  create the list w/ zeros
for e in doc1:
    if e[0] in l1:
        res.append(e[2])
    else:
        if e[0] not in l1:
            res.append(0) # I don´t know if this is redundant

return res

res = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 1, 1, 1]

答案 1 :(得分:0)

鉴于你在评论中给出的解释,这是我的尝试:

def vectores(doc1, doc2, consulta):

    thingies = doc1 + doc2 + consulta
    result = [0] * len(thingies)
    for index,value in enumerate([ item[2] for item in doc1 ]):
        result[index] = value

    return result
print result
>>> [ 1, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 ]
      <-------------->  <-------------->  <----->
            doc1              doc2        consulta

您正在将doc1doc1+doc2+consulta进行比较。我仍然不知道result如何有用,但这就是你所问的。