Как определить, содержит ли какой-либо элемент списка подстроку без использования цикла for

#python-3.x #string

#python-3.x #строка

Вопрос:

Допустим, у меня есть

list = ["tree", "gate", "buy", "train", "test"]

и у меня есть строка следующего вида:

string = "rain"

Я хочу использовать правило, чтобы понять, содержит ли какой-либо элемент списка мою строку или нет. В этом случае я хочу, чтобы это стало правдой.

Я знаю, что могу сделать это именно так:

 flag = False
for element in list:
    if string in element:
        flag = True
 

Тем не менее, я хочу знать, есть ли для этого какой-то метод. Или есть способ контролировать это с помощью простого оператора if?

Спасибо.

Комментарии:

1. Считается ли выражение генератора или понимание списка для вас «циклом for»?

2. вы могли бы написать any(string in element for element in list) , но в основном это просто другой способ написать то же самое

3. Если вы хотите избежать for ключевого слова, которое вы могли бы использовать any(map(lambda element: string in element, list)) , но это также было бы просто менее читаемым способом написания того же самого.

4. другим способом было бы присоединиться к списку: string in '|'.join(list) попробуйте timeit , чтобы узнать, какой самый быстрый способ, если вам интересно

Ответ №1:

Если вы действительно ненавидите за строку, concat — это один из способов, который вы можете реализовать. Другие могут быть понятны для списка, но это всего лишь одна линейная версия цикла for.

Также следует отметить, что приведенный ниже ответ займет O (N) времени, так что на самом деле это не быстрее. Просто другой способ реализации.

 arr = ["tree", "gate", "buy", "train", "test"]
ans = False
ele= "rain"
if ele in "~".join(arr): ans=True
ans
 

Комментарии:

1. Я просто хотел простой способ его написания, и, похоже, это самый простой. Спасибо!

2. Могу ли я спросить еще кое-что: если у меня есть arr = [» «, «-«, «*», «/»] строка = «один / два» в качестве входных данных, и я хочу получить [«один», «/», «два»] на выходе. Более четко, если в строке появляется элемент arr, в этом случае как я могу его найти?

3. посмотрите string.split , что он делает то, что вы хотите.