Подтвердить что ты не робот

Строки Python заканчиваются завершающим NULL?

Есть ли специальный символ в конце строк Python? Как это \0 в C или С++. Я хочу подсчитать длину строки в python без использования встроенной функции len.

4b9b3361

Ответ 1

В Python нет символа конца строки, по крайней мере, не один, который отображается, и он будет зависящим от реализации. Строковые объекты сохраняют свою собственную длину, и это не то, о чем вам нужно беспокоиться. Существует несколько способов получить длину строки без использования len().

str = 'man bites dog'
unistr = u'abcd\u3030\u3333'

# count characters in a loop
count = 0
for character in str:
    count += 1
>>> count
13

# works for unicode strings too
count = 0
for character in unistr:
    count += 1
>>> count
6

# use `string.count()`
>>> str.count('') - 1
13
>>> unistr.count(u'') - 1
6

# weird ways work too
>>> max(enumerate(str, 1))[0]
13
>>> max(enumerate(unistr, 1))[0]
6
>>> str.rindex(str[-1]) + 1
13
>>> unistr.rindex(unistr[-1]) + 1
6

# even weirder ways to do it
import re
pattern = re.compile(r'$')
match = pattern.search(str)
>>> match.endpos
13
match = pattern.search(unistr)
>>> match.endpos
6

Я подозреваю, что это только верхушка айсберга.

Ответ 2

l = "this is my string"
counter = 0
for letter in l:
    counter += 1

>>> counter
17

Ответ 3

count=0
for i in 'abcd':
    count+=1
print 'lenth=',count

другой способ:

for i,j in enumerate('abcd'):
    pass
print 'lenth=',i+1

enumerate - встроенная функция, возвращающая кортеж (индекс и значение)

Например:

l= [7,8,9,10]
print 'index','value'
for i ,j in enumerate(l):
    print i,j

выходы:

index   value
0        7
1        8
2        9
3        10

Ответ 4

Несколько интересных вещей, которые я нашел:

s_1 = '\x00'
print ("s_1 : " + s_1)
print ("length of s_1:  " + str(len(s_1)))

s_2 = ''
print ("s_2 : " + s_2)
print ("length of s_2:  " + str(len(s_2)))

if s_2 in s_1:
    print ("s_2 in s_1")
else:
    print ("s_2 not in s_1")

Вывод:

s_1 :  
length of s_1:  1
s_2 : 
length of s_2:  0
s_2 in s_1

Здесь s_1 выглядит как '', а s_2 кажется "или" NULL.

Ответ 5

Чтобы ответить на вопрос, который вы задали, нет конца NULL или чего-то подобного в конце строки Python (что вы можете видеть), потому что нет никакого способа "упасть с конца" строка. Внутри, самая популярная реализация Python написана на C, поэтому, вероятно, есть строка с завершающим NULL где-то под капотом. Но это полностью непрозрачно для вас как разработчика Python.

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

sum([1 for _ in "your string goes here"])

который, на мой взгляд, немного более изящный.

Ответ 6

последний индекс строки обозначает -1, я имею в виду, если вы хотите получить последний символ в строке, вам нужно использовать строку [-1], поэтому, используя -1, вы можете получить длину строки, не используя len() функция пожалуйста попробуйте следующее

s="helllooooo"
for a in s:
    length=s.rindex(s[-1])
print(length+1)

это даст тот же ответ, что и вы с len()