Есть ли способ проверить, есть ли какой-либо из элементов списка в строке и заменить их? - PullRequest
1 голос
/ 10 ноября 2019

Вот код, который я пробовал, но он возвращает вывод для обоих случаев

alist = ['bla', 'blblblbl', 'asasa', 'blblblblblb']
astring = 'bla lalala lvlvl lblblbl asasa'
for i in alist:
    if i in astring:
        newstring = astring.replace(i, 'True')
        print(newstring)

Вывод:

True lalala lvlvl lblblbl asasa
bla lalala lvlvl lblblbl True

, а мне нужно:

True lalala lvlvl lblblbl True

Ответы [ 5 ]

2 голосов
/ 10 ноября 2019

Я бы предложил просто разделить astring, используя понимание списка для подстановки, и присоединить его обратно:

print(' '.join(['True' if i in alist else i for i in astring.split()]))

производит:

True lalala lvlvl lblblbl True

Чтобы разбить этонемного:

print(' '.join([
    'True' if i in alist else i 
    for i in astring.split()
]))
  • astring.split() == ['bla', 'lalala', 'lvlvl', 'lblblbl', 'asasa']
  • 'True' if i in alist else i заменяет i на 'True', если i находится в alist
  • ['True' if i in alist else i for i in astring.split()] == ['True', 'lalala', 'lvlvl', 'lblblbl', 'True']
  • ' '.join(['True', 'lalala', 'lvlvl', 'lblblbl', 'True'] превращает список в одну строку с ' ', соединяющим элементы списка.
1 голос
/ 10 ноября 2019

Вы можете легко решить эту проблему с помощью re.sub

alist = ['bla', 'blblblbl', 'asasa', 'blblblblblb']
astring = 'bla lalala lvlvl lblblbl asasa'
print(re.sub("|".join(sorted(alist,key=len,reverse=True)),"True",astring))
1 голос
/ 10 ноября 2019

str.replace возвращает новую копию строки, заменяя старую на новую, и вы не сохраняете ее, поэтому всегда сохраняйте новую копию и выполняйте следующие replace действия

Возвращает копию строки, в которой все вхождения подстроки old заменены на новые

alist = ['bla', 'blblblbl', 'asasa', 'blblblblblb']
astring = 'bla lalala lvlvl lblblbl asasa'
    for i in alist:
       if i in astring:
           astring = astring.replace(i,'True')  # True lalala lvlvl lblblbl True
    print(astring)
0 голосов
/ 11 ноября 2019

Вы можете пойти с попыткой, кроме.

alist = ['bla', 'blblblbl', 'asasa', 'blblblblblb']
astring = 'bla lalala lvlvl lblblbl asasa'
for i in alist:
    try:
        astring = astring.replace(i, 'True')
    except:
        pass
print(astring)
0 голосов
/ 10 ноября 2019

Вы можете выполнять итерации, используя функцию диапазона, и использовать этот индекс для замены слова в разделенном списке

def replace(string_data,map_list):

    splited_string = string_data.split()
    for word in range(len(splited_string)):
        if splited_string[word] in map_list:
            splited_string[word] = 'True'
    return " ".join(splited_string)

Вывод:

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