Как я могу изменить элементы в одном списке в зависимости от элементов в другом списке? - PullRequest
0 голосов
/ 07 мая 2019

У меня есть два списка. Элементы в первом списке соответствуют элементам во втором списке. Я хочу объединить все элементы в 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 Ответ

2 голосов
/ 07 мая 2019

Вы можете хранить имена, пока не достигнете ни одного имени, а затем добавить его к результату.

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']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...