Никакая встроенная функция не поможет вам в этом, поскольку сканирование подстроки в list
не поддерживается, и делать это в обратном порядке вдвойне сложно.Понимания списков тоже не принесут пользы, так как создание достаточного состояния для распознавания, когда вы нашли свою стрелку, потребует добавления побочных эффектов к пониманию списка, что делает его загадочным и нарушает назначение инструментов функционального программирования.Итак, вы застряли, выполняя цикл самостоятельно:
list2 = []
list1iter = reversed(list1) # Make a reverse iterator over list1
for item in list1iter:
if sub_string in item: # Found item to remove, don't append it, we're done
break
list2.append(item) # Haven't found it yet, keep item
list2.extend(list1iter) # Pull all items after removed item
list2.reverse() # Put result back in forward order
Попробуйте онлайн!
Альтернативным подходом будет сканирование по индексу, позволяющее вам del
Это;это может быть лучшим решением, если вы хотите изменить list1
на месте, а не создавать новый list
:
for i, item in enumerate(reversed(list1), 1):
if sub_string in item:
del list1[-i]
break
Попробуйте онлайн!
Это решение можно адаптировать к созданию новой копии, просто изменив все ссылки на list1
на list2
и добавив list2 = list1[:]
перед циклом.
В обоих случаях вы можете определить, был ли элементнайдено вообще, положив else:
блок на for
;если срабатывает блок else
, вы не break
, потому что sub_string
нигде не было найдено.