2014-06-25 9 views
9

C'è un carattere speciale sulla fine delle stringhe Python? Come se fosse \ 0 in C o C++. Voglio contare la lunghezza della stringa in python senza usare la funzione integrata len.Le stringhe Python terminano con un NULL terminante?

+1

Sembra lavoro domestico. Che cosa hai provato? –

+3

Non è NULL in Java ... –

+0

@AamirAdnan Stavo cercando di usare la stessa cosa che facciamo in Java o C++ per controllare la fine della stringa. – ayushgp

risposta

9

Non esiste un carattere di fine stringa in Python, almeno non uno che è esposto e che dipenderebbe dall'implementazione. Gli oggetti stringa mantengono la loro lunghezza e non è qualcosa di cui devi preoccuparti. Esistono diversi modi per ottenere la lunghezza della stringa senza utilizzare 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 

Sospetto che questa sia solo la punta dell'iceberg.

+0

Usare espressioni regolari per ottenere la lunghezza di una stringa? Questa è la cosa più divertente che ho visto oggi. – Shuklaswag

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

altro modo:

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

enumerate è costruito in funzione che restituisce una tupla (indice e valore)

Ad esempio:

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

uscite:

index value 
0  7 
1  8 
2  9 
3  10 

+0

cosa fa l'enumerazione? A che cosa serve j in questo codice? – ayushgp

+0

@ayushgp controlla ora –

+0

grazie, ancora una domanda però, qual è la fine del carattere stringa, se ce n'è? – ayushgp

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

>>> counter 
17 
1

per rispondere alla domanda che lei ha chiesto: non c'è un NULL di terminazione o qualcosa di simile alla fine di una stringa Python (che si può vedere), perché non c'è modo per te di "cadere alla fine" di una stringa. Internamente, l'implementazione Python più popolare è scritta in C, quindi probabilmente c'è una stringa con terminazione NULL da qualche parte sotto il cofano. Ma è completamente opaco per te come sviluppatore Python.

Se si desidera ottenere la lunghezza senza utilizzare una funzione incorporata, è possibile eseguire una serie di operazioni diverse. Ecco un'opzione che è diversa dalle altre postate qui:

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

che è, a mio parere, un po 'più elegante.

+1

Python probabilmente NON usa la terminazione null internamente, perché le stringhe possono contenere valori nulli: '\ 0' (echos '\ x00') –

3

diverse cose interessanti che ho trovato:

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") 

L'output è:

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

Qui S_1 sembra come un '' e s_2 sembra un '' o un NULL.

Problemi correlati