मैं अजगर में एक स्ट्रिंग के अंदर एक चरित्र की स्थिति कैसे प्राप्त कर सकता हूं?
मैं अजगर में एक स्ट्रिंग के अंदर एक चरित्र की स्थिति कैसे प्राप्त कर सकता हूं?
जवाबों:
इसके लिए दो स्ट्रिंग विधियाँ हैं, find()
और index()
। दोनों के बीच का अंतर तब होता है जब खोज स्ट्रिंग नहीं मिलती है। find()
लौटता है -1
और index()
उठता है 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]])
में सबसे कम सूचकांक लौटें रों जहां सबस्ट्रिंग उप ऐसी है कि पाया जाता है उप पूर्ण में निहित हैs[start:end]
।-1
असफलता पर लौटें । शुरुआत और अंत के लिए चूक और नकारात्मक मूल्यों की व्याख्या स्लाइस के लिए समान है।
तथा:
string.index(s, sub[, start[, end]])
जैसेfind()
किValueError
जब सब्स्टिट्यूट नहीं मिली तो उठाएं ।
पूर्णता के लिए, यदि आपको किसी वर्ण के सभी पदों को स्ट्रिंग में खोजने की आवश्यकता है, तो आप निम्न कार्य कर सकते हैं:
s = 'shak#spea#e'
c = '#'
print [pos for pos, char in enumerate(s) if char == c]
जो लौटेगा [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 को एक सूची प्रारूप में रखा जाएगा । मुझे यह वास्तव में उपयोगी लगता है
>>> s="mystring"
>>> s.index("r")
4
>>> s.find("r")
4
"लंबी घुमावदार" रास्ता
>>> for i,c in enumerate(s):
... if "r"==c: print i
...
4
विकल्प पाने के लिए,
>>> s="mystring"
>>> s[4:10]
'ring'
str[from:to]
कहाँ from
और to
सूचकांक हैं
बस पूरा करने के लिए, जिस स्थिति में मैं इसे जांचने के लिए फ़ाइल नाम में एक्सटेंशन ढूंढना चाहता हूं, मुझे अंतिम '' खोजने की आवश्यकता है, इस मामले में rfind का उपयोग करें:
path = 'toto.titi.tata..xls'
path.find('.')
4
path.rfind('.')
15
मेरे मामले में, मैं निम्नलिखित का उपयोग करता हूं, जो कि पूर्ण फ़ाइल नाम का काम करता है:
filename_without_extension = complete_name[:complete_name.rfind('.')]
left = q.find("{"); right = q.rfind("}")
:।
क्या होता है जब स्ट्रिंग में डुप्लिकेट चरित्र होता है? अपने अनुभव से index()
मैंने देखा कि डुप्लिकेट के लिए आपको उसी इंडेक्स को वापस मिलता है।
उदाहरण के लिए:
s = 'abccde'
for c in s:
print('%s, %d' % (c, s.index(c)))
लौटूंगा:
a, 0
b, 1
c, 2
c, 2
d, 4
उस मामले में आप ऐसा कुछ कर सकते हैं:
for i, character in enumerate(my_string):
# i is the position of the character in the string
enumerate
उस चीज़ के लिए बेहतर है।
string.find(character)
string.index(character)
शायद आप प्रलेखन पर एक नज़र रखना चाहेंगे कि दोनों के बीच क्या अंतर है।
एक स्ट्रिंग में एक चरित्र कई बार दिखाई दे सकता है। एक स्ट्रिंग में उदाहरण के लिए sentence
, की स्थिति e
है 1, 4, 7
(क्योंकि अनुक्रमण आमतौर पर शून्य से शुरू होता है)। लेकिन मुझे जो भी मिल रहा है, वह दोनों कार्य है find()
और index()
एक चरित्र की पहली स्थिति देता है। तो, ऐसा करने से इसे हल किया जा सकता है:
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
एक तृतीय-पक्ष उपकरण है जो किसी स्थिति को संतुष्ट करने वाले आइटम के सभी संकेत पाता है।
यहां हमें पत्र के सभी सूचकांक स्थान मिलते हैं "i"
।
import more_itertools as mit
s = "supercalifragilisticexpialidocious"
list(mit.locate(s, lambda x: x == "i"))
# [8, 13, 15, 18, 23, 26, 30]