найти кусок строки в списке и заменить - PullRequest
0 голосов
/ 19 сентября 2018

Я сталкивался с сообщениями, в которых показано, как найти строку в списке и заменить ее, но у меня возникают трудности при обобщении поиска только на фрагмент строки.

Например,

listX = ['color green', 'shape circle', 'above t']

Я хотел бы найти все строки, которые начинаются с 'выше', я смог выполнить минимальный поиск списка, используя any и оставив следующий пробел 'above ', но я могу 'не могу понять, как заменить то, что я нахожу.

Вывод, который я пытаюсь создать, будет:

['color green', 'shape circle', 'above']

Я также хотел бы выяснить, как удалить строку, которая начинаетсяс «выше» из списка все вместе.

Ответы [ 3 ]

0 голосов
/ 19 сентября 2018

Я не уверен, что это то, что вы ищете, но это сработало для меня, оно напечатало:

[«зеленый цвет», «круг формы», «все, что вы хотите»]

listX = ['color green', 'shape circle', 'above t']

for i in range(len(listX)):

    splitting = listX[i].split(' ')
    if splitting[0] == 'above':
        listX[i] = 'whatever you want'

print(listX)
0 голосов
/ 19 сентября 2018

Другая альтернатива:

for idx, item in enumerate(listX):
    if item.startswith('above'):
        listX[idx] = 'above'

После этого у нас будет один или несколько 'above' s, тогда мы сможем удалить их всех.

while listX.count('above') > 0:
    listX.remove('above')
0 голосов
/ 19 сентября 2018
['above' if x.startswith('above') else x for x in listX]

Если вы хотите удалить все строки, начинающиеся с 'above', вы можете сделать что-то наподобие того, что @JonClements упомянул в комментариях:

[x for x in listX if not x.startswith('above')]

В качестве альтернативы:

from itertools import filterfalse
list(filterfalse(lambda x: x.startswith('above'), listX))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...