Проверить, нет ли какого-либо символа в строке в другой строке

У меня есть функция, в которой пользователь вводит строку s.
Если какой-либо символ в s не находится в "0123456789e+-. ", функция должна вернуть False.

Я пробовал это:

if any(s) not in "0123456789e+-. ":
    return False

Этот:

if any(s not in "0123456789e+-. "):
    return False

И это:

if any(character for character in s not in "0123456789e+-. "):
    return False

Как мне использовать функцию any() в этом случае?


person António Gonçalves    schedule 29.06.2019    source источник


Ответы (2)


Просто с разницей в sets:

pattern = "0123456789e+-. "
user_input = '=-a'

if set(user_input) - set(pattern):
    return False

или просто проверьте отрицательное подмножество:

if not set(user_input) < set(pattern):
    return False

https://docs.python.org/3.7/library/stdtypes.html#set-types-set-frozenset

person RomanPerekhrest    schedule 29.06.2019

Вы хотите перебрать каждый символ в s и проверить, нет ли его в наборе "0123456789e+-. "

chars = set("0123456789e+-. ")
if any(c not in chars for c in s):
    return False

В этом случае вы также можете использовать все для проверки того же условия.

chars = set("0123456789e+-. ")
if not all(c in chars for c in s):
    return False
person Devesh Kumar Singh    schedule 29.06.2019
comment
Как насчет просто: return all(c in set("0123456789e+-. ") for c in s)? - person Austin; 29.06.2019
comment
Это хороший аргумент @Austin, но я не знал, хочет ли OP вернуть True в другом случае, поэтому я не добавил его - person Devesh Kumar Singh; 29.06.2019
comment
Это будет создавать новый набор с каждой итерацией, не так ли? Ничего особенного, но только одна из тех вещей. - person Mad Physicist; 29.06.2019
comment
Ярмарка @MadPhysicist обновлена ​​соответствующим образом! - person Devesh Kumar Singh; 29.06.2019