追加功能在python中未给出期望的结果

时间:2019-05-23 23:52:28

标签: python-3.x for-loop nested

下面给出的代码不能给出下面指定的预期结果。我尝试了很多排列,但没有成功。

posLabels = ['abc', 'def', 'ab3','ab4', 'ab5']
senPosList = [('abc','def','ghi'),('jkl','mno','pqr','123'), 
('stu','vwx')]
senVecList= []
senVec = []
posLabels[0] in senPosList[0]

for x in range(3):
    for i in range(5):
        if posLabels[i] in senPosList[x]:
            senVec.append(1)
        else: 
            senVec.append(0)
    senVecList.append(senVec)
print(senVecList)

结果:

[[1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]] 

我想要senVecList = [[1, 1, 0, 0, 0],[0, 0, 0, 0, 0],[0, 0, 0, 0, 0]]

3 个答案:

答案 0 :(得分:1)

我想你想做到的是这个

posLabels = ['abc', 'def', 'ab3','ab4', 'ab5']
senPosList = [('abc','def','ghi'),('jkl','mno','pqr','123'), ('stu','vwx')]
senVecList= []

for x in range(3):
    senVec = []
    for i in range(5):
        if posLabels[i] in senPosList[x]:
            senVec.append(1)
        else: 
            senVec.append(0)
    senVecList.append(senVec)

print(senVecList)

请注意,我们在外部循环中将一个空列表重新分配给senVec。否则,您会将更多值附加到相同的旧列表中,该列表将被附加三次。

答案 1 :(得分:1)

这产生了所需的输出,尽管我仍然不明白目标。

pos_labels = ['abc', 'def', 'ab3', 'ab4', 'ab5']
sen_pos_list = [
    ('abc', 'def', 'ghi'),
    ('jkl', 'mno', 'pqr', '123'),
    ('stu', 'vwx')
    ]

sen_vec_list = [[int(p in s) for p in pos_labels] for s in sen_pos_list]

print(sen_vec_list)

答案 2 :(得分:0)

posLabels = ['abc', 'def', 'ab3','ab4', 'ab5']
senPosList = [('abc','def','ghi'),('jkl','mno','pqr','123'),('stu','vwx')]
senVecList= []
senVec = []
posLabels[0] in senPosList[0]

for x in senPosList:
    for i in posLabels:
        if i in x:
            senVec.append(1)
        else: 
           senVec.append(0)
    senVecList.append(senVec)
    senVec = [] #add this line to clear the list
print(senVecList)

如果您不清除列表,则必须在每次循环后继续添加列表。