Я столкнулся с сообщениями, в которых показано, как найти строку в списке и заменить, но мне сложно обобщить поиск только на часть строки.
Например
listX = ['color green', 'shape circle', 'above t']
Я бы хотел найти все строки, которые начинаются с "выше", я смог выполнить минимальный поиск списка, используя any
и оставив следующее пространство 'above '
но я не могу понять, как заменить то, что я находить.
Результат, который я пытаюсь создать, будет:
['color green', 'shape circle', 'above']
Я также хотел бы выяснить, как удалить строку, которая начинается с "выше" из списка.
['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))
Я не уверен, что это то, что вы ищете, но это сработало для меня, оно напечатало:
['цвет зеленый', 'круг формы', 'все, что вы хотите']
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)
.startswith()
гораздо более чистый подход IMO, но да, это будет работать
splitting[1]
возвращать 't', в этом случае?
Другая альтернатива:
for idx, item in enumerate(listX):
if item.startswith('above'):
listX[idx] = 'above'
После этого у нас будет одно или несколько 'above'
, тогда мы сможем их удалить.
while listX.count('above') > 0:
listX.remove('above')
new_list = [item if not item.startswith('above') else 'above' for item in listX]