2014-06-25 16 views
9

Python dizelerinin sonunda özel bir karakter var mı? C veya C++ 'da olduğu gibi. Yerleşik len işlevini kullanmadan python dizesinin uzunluğunu saymak istiyorum.Python dizeleri sonlanan bir NULL içinde mi bitiyor?

+1

Ev işi gibi görünüyor. Ne denedin? –

+3

Java'da NULL değil ... –

+0

@AamirAdnan Dize sonunu kontrol etmek için Java veya C++ ile aynı şeyi kullanmaya çalışıyordum. – ayushgp

cevap

9

Python'da en az bir karakter dizisi karakteri yok, en azından görünmeyen bir tane var ve uygulamaya bağımlı olacak. Dize nesneler kendi uzunluklarını korur ve bununla ilgilenmeniz gereken bir şey değildir. len() kullanmadan dizenin uzunluğunu almanın çeşitli yolları vardır.

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 

Bunun buzdağının sadece görünen kısmı olduğunu sanıyorum.

+0

Bir dizenin uzunluğunu almak için regex kullanma? Bugün gördüğüm en komik şey bu. – Shuklaswag

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

başka bir şekilde:

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

enumerate bir bir demet (indeks ve değer) Örneğin

döner işlevi inşa:

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

çıkışlar: Bir Python dize ucunda böyle bir sonlandırma NULL ya da bir şey (eğer görülebilecektir) yoktur:

index value 
0  7 
1  8 
2  9 
3  10 

+0

numaralandırma ne yapar? Bu kodda j'nin kullanımı nedir? – ayushgp

+0

@ayushgp Şimdi –

+0

teşekkürler, yine de bir soru, eğer varsa, string karakterin sonu nedir? – ayushgp

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

>>> counter 
17 
1

İstediğin soruyu cevaplamak için çünkü bir dizenin "sonunun düşmesi" için bir yolu yoktur. Dahili olarak, en popüler Python uygulaması C dilinde yazılmıştır, bu yüzden muhtemelen kaputun altında bir yerde NULL sonlandırılmış bir dizedir. Ama bu bir Python geliştiricisi olarak tamamen opak.

Uzunluğunu yerleşik bir işlev kullanmadan elde etmek istiyorsanız, çok sayıda farklı şey yapabilirsiniz.

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

, bence, biraz daha zarif: İşte burada yayınlanan diğerlerinden farklı bir seçenek.

+1

Python, muhtemelen dizeleri null içerebilir çünkü null sonlandırma iç, kullanın: '\ 0' (echos '\ x00') –

3

Çeşitli ilginç şeyler buldum:

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

çıktısı:

İşte
s_1 : 
length of s_1: 1 
s_2 : 
length of s_2: 0 
s_2 in s_1 

S_1 bir 'gibi görünüyor' ve S_2 bir gibi görünüyor '' ya da NULL.

İlgili konular