#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
, что он делает то, что вы хотите.