Python'da bir dizenin içindeki bir karakterin konumunu nasıl alabilirim?
Python'da bir dizenin içindeki bir karakterin konumunu nasıl alabilirim?
Yanıtlar:
Bunun için iki dize yöntemi vardır find()ve index(). İkisi arasındaki fark, arama dizesi bulunamadığında gerçekleşir. find()döner -1 ve index()yükseltir ValueError.
find()>>> myString = 'Position of a character'
>>> myString.find('s')
2
>>> myString.find('x')
-1
index()>>> myString = 'Position of a character'
>>> myString.index('s')
2
>>> myString.index('x')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: substring not found
string.find(s, sub[, start[, end]])
Alt dize altının bulunacağı s cinsinden en düşük dizini , alt tümüyle içerilecek şekilde döndürün . Arıza durumunda geri dönüş . Negatif değerlerin başlangıç ve bitiş ve yorumlama varsayılanları dilimlerle aynıdır.s[start:end]-1
Ve:
string.index(s, sub[, start[, end]])
Gibifind()ama zamValueErroralt dize bulunamadığında görüntülenen.
Bir tamlık uğruna, bir dizede bir karakterin tüm konumlarını bulmanız gerekiyorsa, aşağıdakileri yapabilirsiniz:
s = 'shak#spea#e'
c = '#'
print [pos for pos, char in enumerate(s) if char == c]
hangisi geri dönecek [4, 9]
print( [pos for pos, char in enumerate(s) if char == c])
foo = ( [pos for pos, char in enumerate(s) if char == c])foo koordinatlarını liste biçiminde koyacaktır . Bu gerçekten yararlı buluyorum
>>> s="mystring"
>>> s.index("r")
4
>>> s.find("r")
4
"Uzun sargılı" yol
>>> for i,c in enumerate(s):
... if "r"==c: print i
...
4
alt dize almak için,
>>> s="mystring"
>>> s[4:10]
'ring'
str[from:to]nerede fromve toendeksler
Sadece tamamlanması için, kontrol etmek için bir dosya adındaki uzantıyı bulmak istiyorum, son '.' Bulmak gerekir, bu durumda rfind kullanın:
path = 'toto.titi.tata..xls'
path.find('.')
4
path.rfind('.')
15
benim durumumda, tam dosya adı ne olursa olsun aşağıdakileri kullanıyorum:
filename_without_extension = complete_name[:complete_name.rfind('.')]
left = q.find("{"); right = q.rfind("}").
Dize yinelenen bir karakter içerdiğinde ne olur? deneyimlerime göre index()yinelenen için aynı endeksi geri aldığını gördüm.
Örneğin:
s = 'abccde'
for c in s:
print('%s, %d' % (c, s.index(c)))
dönecekti:
a, 0
b, 1
c, 2
c, 2
d, 4
Bu durumda böyle bir şey yapabilirsiniz:
for i, character in enumerate(my_string):
# i is the position of the character in the string
enumeratebu tür şeyler için daha iyidir.
string.find(character)
string.index(character)
Belki de ikisi arasındaki farkın ne olduğunu öğrenmek için belgelere göz atmak istersiniz .
Bir karakter bir dizede birden çok kez görünebilir. Bir dizi Örneğin sentence, pozisyon eolan 1, 4, 7(indeksleme genellikle sıfırdan başlar için). ama ne bulmak işlevlerin hem find()ve index()bir karakterin ilk pozisyonunu döndürür. Yani, bunu yaparak çözülebilir:
def charposition(string, char):
pos = [] #list to store positions for each 'char' in 'string'
for n in range(len(string)):
if string[n] == char:
pos.append(n)
return pos
s = "sentence"
print(charposition(s, 'e'))
#Output: [1, 4, 7]
more_itertools.locate bir koşulu karşılayan tüm öğeleri gösteren üçüncü taraf bir araçtır.
Burada mektubun tüm dizin yerlerini buluruz "i".
import more_itertools as mit
s = "supercalifragilisticexpialidocious"
list(mit.locate(s, lambda x: x == "i"))
# [8, 13, 15, 18, 23, 26, 30]
Tüm dizinlere hızlı erişim için numpy içeren bir çözüm:
string_array = np.array(list(my_string))
char_indexes = np.where(string_array == 'C')