Python: сравнение и замена списка [i] скобками - PullRequest
2 голосов
/ 25 июня 2019

Учитывая два списка, я хочу сравнить list1 и list2, заменить его в list1 и добавить скобки.

str1 = "red man juice"
str2 = "the red man drank the juice"

one_lst = ['red','man','juice']
lst1 = ['the','red','man','drank','the','juice']

ожидаемый результат:

lst1 = ['the','[red]','[man]','drank','the','[juice]']

Что я пробовал до сих пор:

lst1 = list(str1.split())
for i in range(0,len(lst1)):
    for j in range(0,len(one_lst)):
        if one_lst[j] == lst1[i]:
            str1 = str1.replace(lst1[i],'{}').format(*one_lst)
lst1 = list(str1.split())
print(lst1)

Я могу заменить его, но без скобок.

Спасибо за помощь!

Ответы [ 3 ]

7 голосов
/ 25 июня 2019

Это то, что вы будете делать на языке более низкого уровня.Если у вас нет особой потребности в этом, в Python я бы использовал list понимание:

str1 = 'red man juice'
str2 = 'the red man drank the juice'

words_to_enclose = set(str1.split())

result = [f'[{word}]'  # replace with '[{}]'.format(word) for Python <= 3.5
          if word in words_to_enclose 
          else word 
          for word in str2.split()]

print(result)

Вывод:

['the', '[red]', '[man]', 'drank', 'the', '[juice]']

Преимущество преобразования в set заключается в том, что требуется (примерно) одно и то же время, чтобы проверить, содержит ли set что-либо, независимо от его размера, тогда как время, необходимое для той же операции для list, масштабируется с учетом его размера.

1 голос
/ 25 июня 2019
str1 = 'red man juice'
str2 = 'the red man drank the juice'

one_lst = ['red','man','juice']
lst1 = ['the','red','man','drank','the','juice']

res=[]

for i in lst1:
    if i in one_lst:
        res.append('{}{}{}'.format('[',i,']'))
    else:
        res.append(i)

print(res)

выход

['the', '[red]', '[man]', 'drank', 'the', '[juice]']
0 голосов
/ 25 июня 2019

Вот одно предложение:

[x if x not in str1.split(' ') else [x] for x in str2.split(' ')]

выход

['the', ['red'], ['man'], 'выпил', 'the', ['juice']]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...