如何根据另一个列表中的元素来修改一个列表中的元素?

时间:2019-05-07 08:28:39

标签: python python-3.x list

我有两个列表。第一个列表中的元素对应于第二个列表中的元素。我想组合listA中所有具有'name'作为连续标签的元素,并反映listB中的更改。

示例输入:

listA = ['my','name','is','dumbledore',',','albus','dumbledore','.','they','call','me','albus','percival','wulfric','brian','dumbledore','.']
listB = ['x','x','x,'name','x','name','name','x','x','x','x','name','name','name','name','name','x']

预期输出:

listA = ['my','name','is','dumbledore',',','albus_dumbledore','.','they','call','me','albus_percival_wulfric_brian_dumbledore','.']
listB = ['x','x','x','name','x','name','x','x','x','x','name','x']

到目前为止,这就是我所拥有的:

prev_a = None
prev_b = None
i=-1
for a, b in zip(listA, listB):
    i += 1
    places = 0
    if b == 'name':
        if prev_b == b:
            prev_a = prev_a + '_' + a
            del listB[i]
            listA[i-1] = prev_a
            del listA[i]
    prev_a = a
    prev_b = b

print(listA)
print(listB)

我得到的输出是:

['my', 'name', 'is', 'dumbledore', ',', 'albus_dumbledore', '.', 'they', 'call', 'me', 'albus_percival', 'percival_brian', 'dumbledore', '.']
['x', 'x', 'x', 'name', 'x', 'name', 'x', 'x', 'x', 'x', 'name', 'name', 'name', 'x']

这是不正确的。如何在不事先知道名称长度的情况下将其概括化以适用于2个单词以上的名称?

1 个答案:

答案 0 :(得分:2)

您可以存储名称,直到没有名称,然后将其添加到结果中。

resA = []
resB = []
current = None
for a,b in zip(listA,listB):
    if b == 'x':
        if current:
            resA.append(current)
            resB.append('name')
            current = None
        resA.append(a)
        resB.append(b)
    else:
        current= current + '_'+a if current else a

if current:
        resA.append(current)
        resB.append('name')


print(resA)
print(resB)

产量:

['my', 'name', 'is', 'dumbledore', ',', 'albus_dumbledore', '.', 'they', 'call', 'me', 'albus_percival_wulfric_brian_dumbledore', '.']
['x', 'x', 'x', 'name', 'x', 'name', 'x', 'x', 'x', 'x', 'name', 'x']