Как найти последний элемент строки питон

Python предлагает много способов получить последний символ строки. Но чтобы в них разобраться, сперва нужно понять, как работает индексирование в Python. Чтобы указать, какой фрагмент строки вы хотите получить, можно использовать квадратные скобки, а в них поместить индекс нужного символа.

Например, в строке “stand firm in the faith” всего 23 символа.

testString = "stand firm in the faith"
print("The length of testString is: %d" % len(testString))

# Вывод:
# The length of testString is: 23

При этом последняя буква “h” имеет индекс 22. Почему 22, а не 23? Потому что в Python индексация начинается с 0. Т.е. первый символ в строке имеет индекс 0, второй – 1 и так далее.

Еще Python имеет замечательную особенность: индексация может идти и в обратном порядке! Просто используйте отрицательные числа, начиная с -1. Под индексом -1 будет последний символ строки, под индексом -2 – предпоследний и т.д.

Схема индексации на примере строки stand firm in the faith

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

Чтобы получить последний символ строки, можно просто обратиться к нему по индексу. Но такое жесткое прописывание индекса связано с определенными проблемами. Для начала вы должны знать сам индекс, а для этого – длину строки. Далее мы опишем несколько лучших методов.

testString = "stand firm in the faith"
lastChar = testString[22]
print("The last character of testString is: %s" % lastChar)

# Вывод:
# The last character of testString is: h

Применение функции len()

Более детерминированный способ получения последнего индекса в строке – это использование функции len() для получения длины строки. В данном случае функция len() вернет 23. Чтобы получить индекс последнего символа, нужно вычесть единицу из длины строки.

testString = "stand firm in the faith"
lastChar = testString[len(testString) - 1]
print("The last character of testString is: %s" % lastChar)

# Вывод:
# The last character of testString is: h

Отрицательный индекс

Вероятно, самый простой способ получить последний символ строки в Python – это использовать отрицательные индексы. Использование отрицательных чисел для индексации в Python позволяет начать отсчет с конца строки. Таким образом, если в строке “stand firm in the faith” вам нужен только последний символ строки, можно обратиться к нему по индексу -1.

testString = "stand firm in the faith"
lastChar = testString[-1]
print("The last character of testString is: %s" % lastChar)

# Вывод:
# The last character of testString is: h

Осторожность при работе с пустой строкой

Все вышеперечисленные методы могут вызвать исключение, если мы не включим в программу проверку ошибок. В следующем примере мы создадим новую строку, в которой не будет ни одного символа. Если мы попытаемся обратиться по индексу к несуществующему символу, Python выбросит исключение.

sampleString = ""
lastChar = sampleString[-1]

Результат:

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: string index out of range

Простой способ исправить этот пример – проверить, что наша строка имеет ненулевую длину (т.е. содержит какие-то символы).

testString = ""
if len(testString) > 0:
    lastChar = testString[len(testString) - 1]
    print("The last character of testString is: %s" % lastChar)
else:
    print("The string was empty")

# Вывод:
# The string was empty

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

Получаем последние n символов строки

Вы также можете захватить не один последний символ, а несколько. Для этого мы будем использовать то, что в Python называется оператором среза.

При помощи среза можно задать диапазон символов. Для этого указываются индексы начала и конца диапазона символов (их разделяет двоеточие). Важно обратить внимание, что символ под начальным индексом войдет в срез, а под конечным – нет. Если при использовании среза вы получаете слишком много или слишком мало символов, то это, скорее всего, связано с непониманием того, как он используется.

testString = "stand firm in the faith"
extractedString = testString[6:10]
print("Extracted string: %s" % extractedString)

# Вывод:
# Extracted string: firm

Примечание редакции: о срезах можно почитать в статье “Срез массива в Python”. Срезы строк работают аналогично.

Как получить последние символы строки с помощью среза

Чтобы получить последние n символов, просто выберите начальный и конечный индекс для среза. Например, если мы хотим получить последнее слово нашей тестовой строки “stand firm in the faith”, мы используем начальный индекс 18. Конечный индекс можно не указывать. В таком случае по умолчанию срез будет до конца строки.

testString = "stand firm in the faith"
lastChars = testString[18:]
print("The last five character of testString is: %s" % lastChars)

# Вывод:
# The last five character of testString is: faith

Можно пойти другим путем и применить функцию len(). Для определения начального индекса среза из длины строки нужно будет вычесть 6. Мы вычитаем единицу, потому что индексация начинается с нуля, и еще 5 – потому что в последнем слове 5 символов.

testString = "stand firm in the faith"
lastChars = testString[len(testString)-6:]
print("The last five character of testString is: %s" % lastChars)

# Вывод:
# The last five character of testString is:  faith

Использование срезов с отрицательной индексацией

Этот вариант немного странный, но это может быть именно то, что вы ищете. Вы можете использовать отрицательную индексацию, чтобы указать начальный индекс, а затем не указывать конечный индекс, чтобы захватить остальную часть строки.

testString = "stand firm in the faith"
lastChars = testString[-5:]
print("The last five character of testString is: %s" % lastChars)

# Вывод:
# The last five character of testString is: faith

Как получить последнее слово в строке

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

Разделите исходную строку на массив новых строк с помощью функции split(). Первый аргумент функции split() указывает конкретный символ, по которому нужно разделить данную строку. Это может быть любой из символов Юникода, даже специальные символы. В нашем случае мы хотим разделить строку по пробелам. После разделения нам останется только выбрать одну из перечисленных выше техник для захвата последнего слова. Для примера используем отрицательный индекс.

testString = "stand firm in the faith"
words = testString.split(" ")
print("The last word of testString is: %s" % words[-1])

# Вывод:
# The last word of testString is: faith

Примечание редакции: о применении функции split() можно почитать в статье “Разделение строки в Python”.

Осторожно при работе с пустой строкой

Это менее рискованно, чем обращение к последнему элементу строки по индексу, поскольку функция split(), вызванная для пустой строки, вернет массив с содержимым [”], и исключение не будет выброшено. Тем не менее, хорошей практикой является добавление обработки ошибок, чтобы в дальнейшем в программе не возникало неожиданного поведения.

sampleString = ""
testString = ""
words = testString.split(' ')
print(words) 
print("The last word of testString is: %s" % words[-1])

# Вывод:
# ['']
# The last word of testString is: 

Ошибки нет, но это, вероятно, не тот результат, которого ожидает наш код. Исправление аналогично предыдущему примеру проверки ошибок:

testString = ""
if testString.count(" ") > 0:
    words = testString.split(' ')
    print("The last word of testString is: %s" % words[-1])
else:
    print("There was not multiple words in the string")

# Вывод:
# There was not multiple words in the string

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

Удаление пробельных символов из строки

Возможно, вы хотите получить последний символ строки, чтобы узнать, является он печатным или пробельным. Вместо того чтобы выписывать эту оценку, можно использовать один из встроенных строковых методов. В этом примере мы покажем, как использовать метод strip().

testString = "this string has white space on the end  "
print("[%s]" % testString)

# Вывод:
# [this string has white space on the end  ]
testString = "this string has white space on the end  "
testString = testString.strip()
print("[%s]" % testString)

# Вывод:
# [this string has white space on the end]

Как видите, метод strip() удалил пробелы из конца строки. Поэтому, если вы пытались получить последний символ, чтобы проверить, нужно ли удалять пробелы, метод strip() – гораздо более простой способ достижения той же цели.

Перевод статьи «Python: How to get the last character in a string».

как вывести последний символ в строке питон

Влад Карпов



Ученик

(147),
на голосовании



4 года назад

скажите пожалуйста пропустил урок

Голосование за лучший ответ

Aleks Nots

Просветленный

(21704)


4 года назад

a = ‘asdf’
print(a[-1])

Вывод
>>> %Run Py3.py
f
>>>

Влад КарповУченик (147)

4 года назад

спасибо большое

Aleks Nots
Просветленный
(21704)
Это не только для строк, а вообще для любых последовательностей, минусовый индекс -1 – это последний элемент.
Цитата из Лутца

В языке Python предусмотрена возможность индексации в обратном порядке,
от конца к началу – положительные индексы откладываются от левого конца
последовательности, а отрицательные – от правого:
>>> S[-1] # Последний элемент в конце S
‘m’
>>> S[-2] # Второй элемент с конца
‘a’
Формально отрицательные индексы просто складываются с длиной строки,
поэтому следующие две операции эквивалентны (хотя первая форма записи
выглядит проще и понятнее):
>>> S[-1] # Последний элемент в S
‘m’
>>> S[len(S)-1] # Отрицательная индексация, более сложный способ
‘m’
Примечательно, что внутри квадратных скобок допускается использовать …

Юрий Попов

Мудрец

(18918)


4 года назад

Иди на Stepik, там есть курсы без дедлайна, которые можно проходить бесплатно и в любом порядке. Можно посмотреть вывод строк на Pythonworld. И даже просто поискать в Google.

Подскажите, пожалуйста, как узнать последний символ определенной строки списка.
Например, дан список list = ["aaab","aade","abez"]
Как вывести последний символ элемента list[0], чтобы получилось b

То есть мне нужна конструкция по аналогии с Java list[0].charAt(list[0].length()-1)

задан 22 окт 2019 в 20:06

LeFroys's user avatar

3

Самый простой и красивый способ — обращение по отрицательному индексу, который помогает получать элементы в обратном порядке:

  • -1 — последний элемент
  • -2 — предпоследний элемент

Пример:

items = ["aaab", "aade", "abez"]
print(items[0][-1])
# b

print(items[0][len(items[0]) - 1])
# b

for x in items:
    print(x, x[-1], x[-2], x[-3], x[-4], sep=' | ')

# aaab | b | a | a | a
# aade | e | d | a | a
# abez | z | e | b | a

ответ дан 25 окт 2019 в 21:57

gil9red's user avatar

gil9redgil9red

76.3k6 золотых знаков51 серебряный знак117 бронзовых знаков

4

stroke = ['asd','','']
print([i for i in stroke[0][::-1]][0])

ответ дан 22 окт 2019 в 20:51

finally's user avatar

finallyfinally

2,37610 серебряных знаков29 бронзовых знаков

Introduction

In this article, you will  learn about 3 different ways of printing the last N character from a String in Python.

Python

Python is an interpreted, high-level, general-purpose programming language created by Guido van Rossum and first released in 1991. He started Python as a hobby project to keep him occupied in the week around Christmas. It got its name from the name of British comedy troupe Monty Python. It is used in :

  1. Software Development
  2. Web Development
  3. System Scripting
  4. Mathematics

To learn how to program in Python, visit Python Basics.

Python String

String is an array of bytes that represent the Unicode characters in Python. Python does not support character datatype. A single character also works as a string. Python supports writing the string within a single quote(”) and a double quote(“”).

To read more about Python String, visit

  • Learn About Strings in Python
  • String Operations in Python
  • Jump Start With Python – Part 4 (Strings)

Finding the last N characters of a String

To understand the concepts, I will take a demo string “C# Corner”. The given string is represented in memory in the following manner:

python_slicing

String Slicing

Slicing means to chop off anything, and string slicing means to extarct the desired part of string and print it. Given below is the memory representation of the demo string along with the index values.

 

The indexes from 0 to 4 are called positive indexes or the default indexes. Positive Indexes always started from zero.

The indexes from -5 to -1 are called the negative indexes. Negative Indexes always start from -1 and go up to the lower limit; i.e. minus the length of the string plus 1 i.e. “-(len(string)+1)”. Negative indexes are used to fetch a string in reverse order.

To print the last character of a String

slicing

Method 1: Using Negative Slicing a String

In this method we will use negative slicing i.e. we will be printing the value stored at the -1 index of the demo string.

  1. str = “C# Corner”    
  2. print(str[-1])

Output will be: r

Another way to print the last element of a string is

  1. str = “C# Corner”        
  2. print(str[-1::])     

Similarly, we can print the last 2 elements by the following logic

  1. str = “C# Corner”      
  2. print(str[-2::]) 

Output will be: er

In the same way, you can print N last characters of a String.

Method 2: Using Reverse a String

This involves reversing a string and then using positive slicing. To understand the method let us first see what are the various ways to reverse a string.

1. Using String slicing

  1. string = “C# Corner”  
  2.     
  3. print (“The original string  is : “,end=””)   
  4. print (string)   
  5.     
  6. print (“The reversed string(using loops) is : “,end=””)   
  7. print (string[::-1]) 

In the above code, we use the concept of slicing, where “string[::-1]” means that we have to print the whole string starting from the “negative one” index.

2. Using Loops

  1. def reverse(s):   
  2.   _str = “”   
  3.   for i in s:   
  4.     _str = i + _str 
  5.   return _str 
  6.     
  7. string = “C# Corner”  
  8.     
  9. print (“The original string  is : “,end=””)   
  10. print (string)   
  11.     
  12. print (“The reversed string(using loops) is : “,end=””)   
  13. print (reverse(string))  

In the above code, we use the concept that we generally use with the palindrome checking. Here we take an empty string and start adding each character one by one starting from the last character.

3. Using Recursion

  1. def reverse(s):   
  2.     if len(s) == 0:   
  3.         return s   
  4.     else:   
  5.         return reverse(s[1:]) + s[0]   
  6.     
  7. _str = “C# Corner”  
  8.     
  9. print (“The original string  is : “,end=””)   
  10. print (_str)   
  11.     
  12. print (“The reversed string(using recursion) is : “,end=””)  
  13. print (reverse(_str))  

In the above code, we use the concept of recursion to print all characters one by one starting from the last character.

4. Using “reversed”

  1. def reverse(string):   
  2.     string = “”.join(reversed(string))   
  3.     return string   
  4.     
  5. _str = “C# Corner”  
  6.     
  7. print (“The original string  is : “,end=””)   
  8. print (_str)   
  9.     
  10. print (“The reversed string(using reversed) is : “,end=””)  
  11. print (reverse(_str))  

In the above code, we use the string “join()” method, which performs string concatenation, and reversed() is used to return the reversed iterator of the given sequence.

You can use any of the above methods to reverse the string, I have used the string slicing method to reverse the string.

In the below code, we reverse the string and then print the index zero of the reversed string.

  1. str = “C# Corner”  
  2. print(str[::-1][0])   

Output will be: r

Similarly to print the last 2 characters of the string we can do the following:

  1. str = “C# Corner”  
  2. print(str[::-1][0:2]) 

Output will be: re

In the same way, you can print the last N characters of a String.

Method 3: Using the length of the string

In this method, we will first find the length of the string and then we will print the last N characters of the string.

  1. _str = “C# Corner”  
  2. print(_str[len(_str)-1]) 

In the above code, we print the last character of the string by printing the length minus 1 value of the string.

  1. _str = “C# Corner”  
  2. N_of_char = 2  
  3. for i in range(0,N_of_char):  
  4.     print(_str[len(_str)-(i+1)],end=””) 

You can use the above example to print any number of last characters, you just need to change the “N_of_char” value to your desired value. I wanted to print the last 2 characters, so I have set that value to 2.

Conclusion

In this article, we discussed 3 ways of printing the last N characters of a String in Python. Do try out these ways and comment with your views on how useful this article was.

Visit C# Corner to find answers to more such questions.

If you have any questions regarding any other technology do have a look at the C# Corner Technology Page.

Базовые операции¶

# Конкатенация (сложение)
>>> s1 = 'spam'
>>> s2 = 'eggs'
>>> print(s1 + s2)
'spameggs'

# Дублирование строки
>>> print('spam' * 3)
spamspamspam

# Длина строки
>>> len('spam')
4

# Доступ по индексу
>>> S = 'spam'
>>> S[0]
's'
>>> S[2]
'a'
>>> S[-2]
'a'

# Срез
>>> s = 'spameggs'
>>> s[3:5]
'me'
>>> s[2:-2]
'ameg'
>>> s[:6]
'spameg'
>>> s[1:]
'pameggs'
>>> s[:]
'spameggs'

# Шаг, извлечения среза
>>> s[::-1]
'sggemaps'
>>> s[3:5:-1]
''
>>> s[2::2]
'aeg'

Другие функции и методы строк¶

# Литералы строк
S = 'str'; S = "str"; S = '''str'''; S = """str"""
# Экранированные последовательности
S = "snptanbbb"
# Неформатированные строки (подавляют экранирование)
S = r"C:tempnew"
# Строка байтов
S = b"byte"
# Конкатенация (сложение строк)
S1 + S2
# Повторение строки
S1 * 3
# Обращение по индексу
S[i]
# Извлечение среза
S[i:j:step]
# Длина строки
len(S)
# Поиск подстроки в строке. Возвращает номер первого вхождения или -1
S.find(str, [start],[end])
# Поиск подстроки в строке. Возвращает номер последнего вхождения или -1
S.rfind(str, [start],[end])
# Поиск подстроки в строке. Возвращает номер первого вхождения или вызывает ValueError
S.index(str, [start],[end])
# Поиск подстроки в строке. Возвращает номер последнего вхождения или вызывает ValueError
S.rindex(str, [start],[end])
# Замена шаблона
S.replace(шаблон, замена)
# Разбиение строки по разделителю
S.split(символ)
# Состоит ли строка из цифр
S.isdigit()
# Состоит ли строка из букв
S.isalpha()
# Состоит ли строка из цифр или букв
S.isalnum()
# Состоит ли строка из символов в нижнем регистре
S.islower()
# Состоит ли строка из символов в верхнем регистре
S.isupper()
# Состоит ли строка из неотображаемых символов (пробел, символ перевода страницы ('f'), "новая строка" ('n'), "перевод каретки" ('r'), "горизонтальная табуляция" ('t') и "вертикальная табуляция" ('v'))
S.isspace()
# Начинаются ли слова в строке с заглавной буквы
S.istitle()
# Преобразование строки к верхнему регистру
S.upper()
# Преобразование строки к нижнему регистру
S.lower()
# Начинается ли строка S с шаблона str
S.startswith(str)
# Заканчивается ли строка S шаблоном str
S.endswith(str)
# Сборка строки из списка с разделителем S
S.join(список)
# Символ в его код ASCII
ord(символ)
# Код ASCII в символ
chr(число)
# Переводит первый символ строки в верхний регистр, а все остальные в нижний
S.capitalize()
# Возвращает отцентрованную строку, по краям которой стоит символ fill (пробел по умолчанию)
S.center(width, [fill])
# Возвращает количество непересекающихся вхождений подстроки в диапазоне [начало, конец] (0 и длина строки по умолчанию)
S.count(str, [start],[end])
# Возвращает копию строки, в которой все символы табуляции заменяются одним или несколькими пробелами, в зависимости от текущего столбца. Если TabSize не указан, размер табуляции полагается равным 8 пробелам
S.expandtabs([tabsize])
# Удаление пробельных символов в начале строки
S.lstrip([chars])
# Удаление пробельных символов в конце строки
S.rstrip([chars])
# Удаление пробельных символов в начале и в конце строки
S.strip([chars])
# Возвращает кортеж, содержащий часть перед первым шаблоном, сам шаблон, и часть после шаблона. Если шаблон не найден, возвращается кортеж, содержащий саму строку, а затем две пустых строки
S.partition(шаблон)
# Возвращает кортеж, содержащий часть перед последним шаблоном, сам шаблон, и часть после шаблона. Если шаблон не найден, возвращается кортеж, содержащий две пустых строки, а затем саму строку
S.rpartition(sep)
# Переводит символы нижнего регистра в верхний, а верхнего – в нижний
S.swapcase()
# Первую букву каждого слова переводит в верхний регистр, а все остальные в нижний
S.title()
# Делает длину строки не меньшей width, по необходимости заполняя первые символы нулями
S.zfill(width)
# Делает длину строки не меньшей width, по необходимости заполняя последние символы символом fillchar
S.ljust(width, fillchar=" ")
# Делает длину строки не меньшей width, по необходимости заполняя первые символы символом fillchar
S.rjust(width, fillchar=" ")

Форматирование строк¶

S.format(*args, **kwargs)

Примеры¶

Python: Определение позиции подстроки (функции str.find и str.rfind)¶

Определение позиции подстроки в строке с помощью функций str.find и str.rfind.

In [1]: str = 'ftp://dl.dropbox.com/u/7334460/Magick_py/py_magick.pdf'

Функция str.find показывает первое вхождение подстроки. Все позиции возвращаются относительно начало строки.

In [2]: str.find('/')
Out[2]: 4

In [3]: str[4]
Out[3]: '/'

Можно определить вхождение в срезе. первое число показывает начало среза, в котором производится поиск. Второе число — конец среза. В случае отсутствия вхождения подстроки выводится -1.

In [4]: str.find('/', 8, 18)
Out[4]: -1

In [5]: str[8:18]
Out[5]: '.dropbox.c'

In [6]: str.find('/', 8, 22)
Out[6]: 20

In [7]: str[8:22]
Out[7]: '.dropbox.com/u'

In [8]: str[20]
Out[8]: '/'

Функция str.rfind осуществляет поиск с конца строки, но возвращает позицию подстроки относительно начала строки.

In [9]: str.rfind('/')
Out[9]: 40

In [10]: str[40]
Out[10]: '/'

Python: Извлекаем имя файла из URL¶

Понадобилось мне отрезать от URL всё, что находится после последнего слэша, т.е.названия файла. URL можеть быть какой угодно. Знаю, что задачу запросто можно решить с помощью специального модуля, но я хотел избежать этого. Есть, как минимум, два способа справиться с поставленным вопросом.

Способ №1¶

Достаточно простой способ. Разбиваем строку по слэшам с помощью функции split(), которая возвращает список. А затем из этого списка извлекаем последний элемент. Он и будет названием файла.

In [1]: str = 'http://dl.dropbox.com/u/7334460/Magick_py/py_magick.pdf'

In [2]: str.split('/')
Out[2]: ['http:', '', 'dl.dropbox.com', 'u', '7334460', 'Magick_py', 'py_magick.pdf']

Повторим шаг с присвоением переменной:

In [3]: file_name = str.split('/')[-1]

In [4]: file_name
Out[4]: 'py_magick.pdf'

Способ №2¶

Второй способ интереснее. Сначала с помощью функции rfind() находим первое вхождение с конца искомой подстроки. Функция возвращает позицию подстроки относительно начала строки. А далее просто делаем срез.

In [5]: str = 'http://dl.dropbox.com/u/7334460/Magick_py/py_magick.pdf'

In [6]: str.rfind('/')
Out[6]: 41

Делаем срез:

In [7]: file_name = str[42:]

In [8]: file_name
Out[8]: 'py_magick.pdf'

Добавить комментарий