kosyachniy
@kosyachniy
Python BackEnd, Web FullStack

Python Какой наиболее оптимальный способ проверки есть ли общий элемент?

Есть строка a и кортеж signs как можно максимально сократить код, чтобы функция проверяла есть ли хотя бы один из знаков в этой строке?
signs=('.','!','?')
def sign(a):
	t=False
	for i in a:
		if i in signs:
			t=True
			break
	return t
...
if sign(text[i].cont) and (i!=len(text)-1):
...

И можно ли заменить функцию на lambda, использовать map?
  • Вопрос задан
  • 238 просмотров
Решения вопроса 1
longclaps
@longclaps
Зачем лямбда, когда есть стандартная библиотека:
s = "здесь есть знаки препинания?"
print(any(c in ".!?" for c in s))

Output:
True
С лямбдой и мэпом и длиннее, и медленнее из-за накладных расходов на вызов лямбды. С сетом медленнее из-за генерации сета. Выражение с any и ленивый генератор - быстрее и не жрёт ресурсы.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
@Eugen_p
Если вам обязательно нужно через map, и не важно на то что будет выполнятся немного больше действий.
any(map(lambda x: x in signs, a))
Ответ написан
Комментировать
@fireSparrow
signs=('.','!','?')
sign = lambda a: bool(set(a) & set(signs))
Ответ написан
Комментировать
ZeroDX
@ZeroDX
Бездельник
bool([True for x in signs for y in a if x == y])
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы