Форум сайта python.su
Добрый день.
Есть список запрещенных символов. Хочу проверить их наличие в строке.
exceptions = ['\\', '/', '|', '<', '>', '?', ':', '"', '*'] test_str = 'some:text' for i in exceptions: if test_str.find(i) != -1: print('все пропало')
Отредактировано SomethingButNotNickName (Март 5, 2018 14:54:15)
Офлайн
да все равно циклы повсюду…
exceptions = ['\\', '/', '|', '<', '>', '?', ':', '"', '*'] test_str = 'some:text\\>' g = lambda x: print(x) if x in exceptions else None list(map(g, test_str)) : \ > Process finished with exit code 0
Отредактировано papuas (Март 5, 2018 15:29:11)
Офлайн
можно, но тут важный вопрос для чего это делается - то есть какая конечная цель
Офлайн
Ну в принципе уже компактнее, хотя и не так очевидно (на мой взгляд). На самом деле я надеялся, что есть аналог .find() принимающий список. Например, в каком нибуть модуле. Гугл не хочет подсказывать - пришел сюда).
Офлайн
Конечная цель - автоматическое создание папок (скриптом). Но в строке - предполагаемом имени папки - могут встретиться символы которые виндовс не разрешает. Соответственно, чтобы не словить лишние ошибки, перед тем как запускать команду создания папки необходимо проверит наличие этих символов и заменить/удалить их.
Офлайн
не, я не об этом. То что вы описали это очевидно. Вопрос был зачем избавляться от циклов. Если вы хотите компактней, то это можно понять. Только вот учитывайте что для именно проверки нахождения недопустимых символов в строке, условно, алгоритмически как Ваш вариант так и papuas плохи.
Теперь далее - сам постановка задачи (конкретно Вами из двух постов) не правильна. Проверить вхождение недопустимых символов и исправить ситуацию это разные вещи.
Вполне возможно что вам просто нужно re.sub
Офлайн
JOHN_16Согласен, и это планировалось делать разными функциями, но перед тем как что-то исправлять, я хотел провести проверку, а надо ли что-то исправлять.
Проверить вхождение недопустимых символов и исправить ситуацию это разные вещи.
Отредактировано SomethingButNotNickName (Март 5, 2018 16:10:46)
Офлайн
В питоне есть такой модуль timeit, который поможет понять какой кусок кода работает быстрее.
Офлайн
JOHN_16Знаком и проверю время работы, когда Вы напишете, как осуществить проверку вхождения символа
В питоне есть такой модуль timeit, который поможет понять какой кусок кода работает быстрее.
Офлайн
примерно так:
import re test_str = 'some:text\>' exception_chars = '\\\/\|<>\?:"\*' find_exceptions = re.compile('([{}])'.format(exception_chars)) res = find_exceptions.findall(test_str) if res: print('string "{}" contains except chars: {}'.format(test_str, res)) >>> string "some:text\>" contains except chars: [':', '\\', '>'] >>>
[code python][/code]
Офлайн