Как найти пробел в строке питон

You mentioned whitespace in general, rather than just spaces. I stumbled upon a solution with isidentifier. Per W3 schools:

A string is considered a valid identifier if it only contains alphanumeric letters (a-z) and (0-9), or underscores (_). A valid identifier cannot start with a number, or contain any spaces.

So, if this matches your requirements, isidentifier is quick and easy to use.

Somebody mentioned efficiency of regex, and I was curious:

import timeit

setup='import re; rs="s"; rc=re.compile(rs); s="applebananacanteloupe"'
stm1='re.search(rs,s)'
stm2='re.search(rc,s)'
stm3='" " in s'
stm4='s.isidentifier()'

timeit.repeat(stm1,setup)
# result: [0.9235025509842671, 0.8889087940042373, 0.8771460619755089, 0.8753634429886006, 1.173506731982343]

timeit.repeat(stm2,setup)
# results: [1.160843407997163, 1.1500899779784959, 1.1857644470001105, 1.1485740720236208, 1.2856045850203373]
# compiled slower than uncompiled? Hmm, I don't get regex...

timeit.repeat(stm3,setup)
# [0.039073383988579735, 0.03403249100665562, 0.03481135700712912, 0.034628107998287305, 0.03392893000273034]

timeit.repeat(stm4,setup)
# [0.08866660299827345, 0.09206177099258639, 0.08418851799797267, 0.08478381999884732, 0.09471498697530478]

So, isidentifier is almost as fast as in, and 10x faster than regex. Note that there is technically no guarantee that python’s idea of what an identifier is won’t change — but it’s also likely that if it did, your code would need some rework anyway.

str.isspace() returns False for a valid and empty string

>>> tests = ['foo', ' ', 'rnt', '']
>>> print([s.isspace() for s in tests])
[False, True, True, False]

Therefore, checking with not will also evaluate None Type and '' or "" (empty string)

>>> tests = ['foo', ' ', 'rnt', '', None, ""]
>>> print ([not s or s.isspace() for s in tests])
[False, True, True, True, True, True]

Время чтения 2 мин.

Строковая функция String isspace() используется в Python для проверки того, содержит ли аргумент все пробельные символы, такие как:

  1. ‘ ‘ — Space
  2. ‘t’ – Horizontal tab
  3. ‘n’ — Newline
  4. ‘v’ — Vertical tab
  5. ‘f’ — Feed
  6. ‘r’ — Carriage return.

Содержание

  1. Что такое функция string isspace() в Python?
  2. Синтаксис
  3. Параметры
  4. Возвращаемое значение
  5. Примеры программ с методом isspace()

String.isspace() — это встроенный метод Python, который сообщает нам, содержит ли данная строка только символы пробела или нет. Метод isspace() возвращает true, если все символы строки являются пробелами, и возвращает false во всех остальных случаях.

Существуют различные типы пробельных символов, такие как ‘n’- новая строка, ‘ ‘-пробел, ‘t’- горизонтальная вкладка и многие другие. С помощью приведенных выше различных типов пробелов мы можем классифицировать, содержит ли наша строка только пробелы или нет, что мы можем проверить с помощью метода isspace().

Синтаксис

Здесь string — это строковая переменная, которая должна быть проверена, содержит ли она все символы, пробелы или нет.

Параметры

Метод String.isspace() не содержит никаких параметров и выдает ошибку при передаче любого параметра.

Возвращаемое значение

Метод возвращает true, если все символы в строке являются пробелами, и false во всех остальных случаях.

Примеры программ с методом isspace()

  • Пример 1: Напишите программу, показывающую работающий метод isspace().

# app.py

h1 = »  «

h2 = «Hello    Boy»

h3 = «nntnn»

h4 = «HelloGirl»

print(h1.isspace())

print(h2.isspace())

print(h3.isspace())

print(h4.isspace())

Вывод:

python3 app.py

True

False

True

False

  • Пример 2: напишите программу, которая проверяет, содержат ли две строки только пробельные символы. Выведите «Yes», если верно, и «No», если ложно.

# app.py

h1 = »  «

h2 = «t»

if(h1.isspace() and h2.isspace()):

    print(«YES»)

else:

    print(«NO»)

Вывод:

  • Пример 3: мы можем вычислить общее количество пробелов в строке.

# app.py

string = ‘KGF movie starringnnnnnn Yash’

count = 0

for a in string:

    if(a.isspace()) == True:

        count += 1

print(count)

Вывод:

7 ответов

def tt(w): 
    if ' ' in w: 
       print 'space' 
    else: 
       print 'no space' 

>>   tt('b ')
>> space
>>  tt('b b')
>> space
>>  tt('bb')
>> no space

Я нахожусь в поезде, жаль, что не объясняю.. не могу набрать много..

doniyor
18 нояб. 2014, в 06:51

Поделиться

Вы используете isspace, в котором говорится

str.isspace()

Возвращает true, если в строке есть только пробельные символы, и есть хотя бы один символ, иначе false.

Для 8-битных строк этот метод зависит от локали.

Nilesh
18 нояб. 2014, в 07:16

Поделиться

Вот аккуратный метод, который иллюстрирует гибкость понимания списков. Это вспомогательный метод, который проверяет, содержит ли данная строка какие-либо пробелы.

код:

import string
def contains_whitespace(s):
    return True in [c in s for c in string.whitespace]

Пример:

>>> contains_whitespace("BB")
False
>>> contains_whitespace("B B")
True

Это, конечно, можно расширить, чтобы проверить, содержит ли какая-либо строка элемент в любом наборе (а не просто пробел). Предыдущее решение — аккуратное, короткое решение, но некоторые могут утверждать, что его трудно читать и меньше Pythonic, чем что-то вроде:

def contains_whitespace(s):
    for c in s:
        if c in string.whitespace:
            return True
    return False

Duke
18 нояб. 2014, в 07:15

Поделиться

Поскольку вы ищете больше, чем просто ' ', где вы можете использовать ' ' in tgt, вы можете использовать any:

for s in ('B ', 'B B', 'BnB', 'BB'):
    print repr(s), any(c.isspace() for c in s)

Печать

'B ' True
'B B' True
'BnB' True
'BB' False

dawg
18 нояб. 2014, в 07:38

Поделиться

user = 'B B'
for x in user:
    if x.isspace():
        print("no")
    else:print("yes")

вам нужно зациклиться на нем, чтобы проверить все элементы, но приведенный выше код не будет работать так, как вы ожидаете.

используйте вспомогательную функцию:

def space(text):
    if ' ' in text:
        return True
    else: return False

демо:

>>> ' ' in 'B B'
True
>>> ' ' in 'BB'
False

используйте in для проверки

если вы хотите использовать isspace:

def space(text):
    for x in text:
        if x.isspace():
            return True
    return False

Вместо того, чтобы возвращать True или False, вы также можете вернуть желаемую строку:

>>> def space(text):
...     if ' ' in text:
...         return " yes Spaces"
...     else: return " No Spaces"
... 
>>> space('B B')
' yes Spaces'
>>> space('BB')
' No Spaces'

Hackaholic
18 нояб. 2014, в 06:42

Поделиться

Вы можете использовать str.split, чтобы проверить, содержит ли строка пробелы:

>>> ''.split()
[]
>>> '  '.split()
[]
>>> 'BB'.split()
['BB']
>>> ' B '.split()
['B']
>>> 'B B'.split()
['B', 'B']

Итак, вы можете проверить как

def hasspace(x):
    if x:
        s = x.split()
        return len(s) == 1 and x == s[0]
    return False

Если вы пытаетесь проверить только целые слова в строке (т.е. вас не беспокоят окружающие пространства, которые можно удалить с помощью x.strip()), условие x == s[0] больше не требуется. Проверка становится единственным выражением:

def hasspace(x):
    return x and len(x.split()) == 1

Теперь вы можете сделать

if hasspace(user):
    print("NO!!!")
else:
    print("YES!!!")

Mad Physicist
09 март 2018, в 20:51

Поделиться

In [1]: a<br>
Out[1]: ' btn'

In [2]: (' ' in a)or('t' in a)or('n' in a)<br>
Out[2]: True

Vietnhi Phuvan
18 нояб. 2014, в 18:30

Поделиться

Ещё вопросы

  • 0MySQL Выберите поле как Distinct с типом данных как Text с фильтрацией
  • 0получить выбранный переключатель из группы
  • 0Как я могу перенаправить с нового URL на предыдущий URL в веб-просмотре, используя angularjs?
  • 0Java — Spring Boot — Mysql / Java — Получить тип транспортного средства из столбца таблицы и получить их общее количество (КОЛИЧЕСТВО) из другой таблицы
  • 1setState не работает с кнопкой DropDown в Flutter
  • 1Как сопоставить шаблон регулярного выражения только в одной строке?
  • 0Относительно предварительного объявления класса C ++
  • 0C ++ ошибка Valgrind
  • 0Сделать элемент div растянутым на всю высоту страницы
  • 0Функция C ++, возвращающая строку с запятой
  • 0Все функции не работают в кнопке возобновления
  • 1HashMap с определенным временем поиска?
  • 0Подсчет вхождений различных значений при возврате различных значений
  • 1Функция хеширования Java MD5, дающая неправильный хеш
  • 1Javascript ES6 Получить JSON из URL (без jQuery)
  • 0Недостаточно аргументов в строке, несколько предложений IN со значениями списка в запросе MySQL из Python
  • 1Лямбда-ошибка Python 3: Истинное значение Серии неоднозначно
  • 0jQuery load () застревает / зависает
  • 1Способ извлечь формат datetime.now из строки?
  • 0Как я могу связать число с определенной строкой и использовать эту строку для фильтрации итерации в AngularJS?
  • 1Как взять целые из Action Event в массив, чтобы создать круг в Java?
  • 1Проблемы с настройкой GUI
  • 0для каждого счетчика цикл в C ++ не увеличивается с определенными числами
  • 1Наследование Java — моделирование нескольких объектов
  • 1Flask sqlAlchemy: создание моделей для существующей структуры базы данных
  • 1значение строки запроса не извлекается
  • 0комплектация не работает
  • 0Оставить MySQL запрос в той же таблице
  • 0Размер массива ограничен в PHP scandir ()
  • 1Установка яркости фильтра родителя без влияния на дочерний элемент
  • 0Относительный путь 2 уровня вверх в JavaScript
  • 0Угловой сервис возвращает пустой объект
  • 0Значение переменной $ scope не обновляется в контроллере Angular JS?
  • 1Не удается найти элемент с помощью селектора CSS с Selenium на Python
  • 0Пользовательская тема Tumblr исчезает при выходе
  • 1Эффективный для памяти способ хранения значений bool и NaN в пандах
  • 0AngularJS: Как мне прокрутить объект со смещением?
  • 0Событие внешнего клика для приостановки запроса аудиоплеера
  • 1Ionic 2 Angular 2 — не удается получить доступ к NavController из метода
  • 0Доступ к функции-члену из вектора указателей? C ++
  • 1Включить CSS в Struts2 JSP странице
  • 1Закрепление WinForm внутри другого WinForm
  • 0href связанный swfobject (без поддержки clicktag)
  • 0Создать экземпляр класса на основе строкового ввода
  • 0Получение данных при печати URL в html-странице
  • 1Динамическое связывание массивов
  • 0Код OpenGL Работает в Windows, но не в Mac
  • 0Как получить значение из запроса MySQL вне оператора запроса?
  • 0Вырезать URL-адрес изображения API Facebook
  • 0Как предотвратить открытие редактора сетки кендо, всплывающих в JavaScript

Часто нам нужно найти символ в строке python. Для решения этой задачи разработчики используют метод find(). Он помогает найти индекс первого совпадения подстроки в строке. Если символ или подстрока не найдены, find возвращает -1.

Синтаксис

string.find(substring,start,end)

Метод find принимает три параметра:

  • substring (символ/подстрока) — подстрока, которую нужно найти в данной строке.
  • start (необязательный) — первый индекс, с которого нужно начинать поиск. По умолчанию значение равно 0.
  • end (необязательный) — индекс, на котором нужно закончить поиск. По умолчанию равно длине строки.

Параметры, которые передаются в метод, — это подстрока, которую требуются найти, индекс начала и конца поиска. Значение по умолчанию для начала поиска — 0, а для конца — длина строки.

В этом примере используем метод со значениями по умолчанию.

Метод find() будет искать символ и вернет положение первого совпадения. Даже если символ встречается несколько раз, то метод вернет только положение первого совпадения.


>>> string = "Добро пожаловать!"
>>> print("Индекс первой буквы 'о':", string.find("о"))
Индекс первой буквы 'о': 1

Поиск не с начала строки с аргументом start

Можно искать подстроку, указав также начальное положение поиска.

В этом примере обозначим стартовое положение значением 8 и метод начнет искать с символа с индексом 8. Последним положением будет длина строки — таким образом метод выполнит поиска с индекса 8 до окончания строки.


>>> string = "Специалисты назвали плюсы и минусы Python"
>>> print("Индекс подстроки 'али' без учета первых 8 символов:", string.find("али", 8))
Индекс подстроки 'али' без учета первых 8 символов: 16

Поиск символа в подстроке со start и end

С помощью обоих аргументов (start и end) можно ограничить поиск и не проводить его по всей строке. Найдем индексы слова «пожаловать» и повторим поиск по букве «о».


>>> string = "Добро пожаловать!"
>>> start = string.find("п")
>>> end = string.find("ь") + 1
>>> print("Индекс первой буквы 'о' в подстроке:", string.find("о", start, end))
Индекс первой буквы 'о' в подстроке: 7

Проверка есть ли символ в строке

Мы знаем, что метод find() позволяет найти индекс первого совпадения подстроки. Он возвращает -1 в том случае, если подстрока не была найдена.


>>> string = "Добро пожаловать!"
>>> print("Есть буква 'г'?", string.find("г") != -1)
Есть буква 'г'? False
>>> print("Есть буква 'т'?", string.find("т") != -1)
Есть буква 'т'? True

Поиск последнего вхождения символа в строку

Функция rfind() напоминает find(), а единое отличие в том, что она возвращает максимальный индекс. В обоих случаях же вернется -1, если подстрока не была найдена.

В следующем примере есть строка «Добро пожаловать!». Попробуем найти в ней символ «о» с помощью методов find() и rfind().


>>> string = "Добро пожаловать"
>>> print("Поиск 'о' методом find:", string.find("о"))
Поиск 'о' методом find: 1
>>> print("Поиск 'о' методом rfind:", string.rfind("о"))
Поиск 'о' методом rfind: 11

Вывод показывает, что find() возвращает индекс первого совпадения подстроки, а rfind() — последнего совпадения.

Второй способ поиска — index()

Метод index() помогает найти положение данной подстроки по аналогии с find(). Единственное отличие в том, что index() бросит исключение в том случае, если подстрока не будет найдена, а find() просто вернет -1.

Вот рабочий пример, показывающий разницу в поведении index() и find():


>>> string = "Добро пожаловать"
>>> print("Поиск 'о' методом find:", string.find("о"))
Поиск 'о' методом find: 1
>>> print("Поиск 'о' методом index:", string.index("о"))
Поиск 'о' методом index: 1

В обоих случаях возвращается одна и та же позиция. А теперь попробуем с подстрокой, которой нет в строке:


>>> string = "Добро пожаловать"
>>> print("Поиск 'г' методом find:", string.find("г"))
Поиск 'г' методом find: 1
>>> print("Поиск 'г' методом index:", string.index("г"))
Traceback (most recent call last):
File "pyshell#21", line 1, in module
print("Поиск 'г' методом index:", string.index("г"))
ValueError: substring not found

В этом примере мы пытались найти подстроку «г». Ее там нет, поэтому find() возвращает -1, а index() бросает исключение.

Поиск всех вхождений символа в строку

Чтобы найти общее количество совпадений подстроки в строке можно использовать ту же функцию find(). Пройдемся циклом while по строке и будем задействовать параметр start из метода find().

Изначально переменная start будет равна -1, что бы прибавлять 1 у каждому новому поиску и начать с 0. Внутри цикла проверяем, присутствует ли подстрока в строке с помощью метода find.

Если вернувшееся значение не равно -1, то обновляем значением count.

Вот рабочий пример:


my_string = "Добро пожаловать"
start = -1
count = 0

while True:
start = my_string.find("о", start+1)
if start == -1:
break
count += 1

print("Количество вхождений символа в строку: ", count )

Количество вхождений символа в строку:  4

Выводы

  • Метод find() помогает найти индекс первого совпадения подстроки в данной строке. Возвращает -1, если подстрока не была найдена.
  • В метод передаются три параметра: подстрока, которую нужно найти, start со значением по умолчанию равным 0 и end со значением по умолчанию равным длине строки.
  • Можно искать подстроку в данной строке, задав начальное положение, с которого следует начинать поиск.
  • С помощью параметров start и end можно ограничить зону поиска, чтобы не выполнять его по всей строке.
  • Функция rfind() повторяет возможности find(), но возвращает максимальный индекс (то есть, место последнего совпадения). В обоих случаях возвращается -1, если подстрока не была найдена.
  • index() — еще одна функция, которая возвращает положение подстроки. Отличие лишь в том, что index() бросает исключение, если подстрока не была найдена, а find() возвращает -1.
  • find() можно использовать в том числе и для поиска общего числа совпадений подстроки.

Понравилась статья? Поделить с друзьями:
  • Как найти порядок печати
  • Как использовать найти указания
  • Как найти ускорение зная силу натяжения
  • Ошибка 0xc00000225 windows 10 как исправить
  • Как составить план дня на листе