पायथन में एक चरित्र की स्थिति कैसे प्राप्त करें?


526

मैं अजगर में एक स्ट्रिंग के अंदर एक चरित्र की स्थिति कैसे प्राप्त कर सकता हूं?

जवाबों:


696

इसके लिए दो स्ट्रिंग विधियाँ हैं, 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जब सब्स्टिट्यूट नहीं मिली तो उठाएं ।


127

पूर्णता के लिए, यदि आपको किसी वर्ण के सभी पदों को स्ट्रिंग में खोजने की आवश्यकता है, तो आप निम्न कार्य कर सकते हैं:

s = 'shak#spea#e'
c = '#'
print [pos for pos, char in enumerate(s) if char == c]

जो लौटेगा [4, 9]


4
Python3 में, मुझे एक सिंटैक्स त्रुटि मिलती है - इसे कैसे संशोधित किया जाना चाहिए?
शॉन

19
@ सीन: प्रिंट स्टेटमेंट को हटा दिया गया था। केवल फ़ंक्शन रूप रहता है। चिड़चिड़ा, लेकिन इसका जवाब बस उस अंतिम लाइन को बदलना है: print( [pos for pos, char in enumerate(s) if char == c])
द नैट

3
foo = ( [pos for pos, char in enumerate(s) if char == c])निर्देशांक foo को एक सूची प्रारूप में रखा जाएगा । मुझे यह वास्तव में उपयोगी लगता है
3nrique0

यह 1234 के विपरीत 0123 अनुक्रमित है, इसलिए वास्तविक स्थिति 5 है, 10
3kstc

क्या यह उतनी ही तेजी से हो सकता है? अगर एक np.arrays का उपयोग किया जाता है तो लंबे समय तक प्रदर्शन में लाभ हो सकता है?
सेब

49
>>> 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'

1
धन्यवाद मुझे बताएं कि हम दिए गए पदों के अनुसार स्ट्रिंग का विकल्प कैसे प्राप्त कर सकते हैं ...
user244470

1
@ सारंग: सबस्ट्रिंग स्लाइसिंग का उपयोग करने के लिए: str[from:to]कहाँ fromऔर toसूचकांक हैं
एली बेंडरस्की

s.find () वापसी -1 यदि सबस्ट्रिंग नहीं पाया जाता है
Evgenii

s.search () जब सबस्ट्रिंग नहीं मिलता है, तो एक ValueError उठाता है। यदि विकल्प नहीं मिला है तो s.find () रिटर्न -1।
प्रैक्सिटेलिस

16

बस पूरा करने के लिए, जिस स्थिति में मैं इसे जांचने के लिए फ़ाइल नाम में एक्सटेंशन ढूंढना चाहता हूं, मुझे अंतिम '' खोजने की आवश्यकता है, इस मामले में 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("}"):।
ximiki

15

क्या होता है जब स्ट्रिंग में डुप्लिकेट चरित्र होता है? अपने अनुभव से 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उस चीज़ के लिए बेहतर है।
o11c

10
string.find(character)  
string.index(character)  

शायद आप प्रलेखन पर एक नज़र रखना चाहेंगे कि दोनों के बीच क्या अंतर है।


उस लिंक किए गए डॉक्यूमेंटेशन से: s.search () जब सबस्ट्रिंग नहीं पाया जाता है, तो एक ValueError उठाता है। यदि विकल्प नहीं मिला है तो s.find () रिटर्न -1।
प्रैक्सिटेल्स

7

एक स्ट्रिंग में एक चरित्र कई बार दिखाई दे सकता है। एक स्ट्रिंग में उदाहरण के लिए 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]

1

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]

0

सभी अनुक्रमितों के त्वरित उपयोग के लिए सुपी के साथ एक समाधान:

string_array = np.array(list(my_string))
char_indexes = np.where(string_array == 'C')

4
कृपया इस पद्धति का उपयोग न करें। साधारण स्ट्रिंग इंडेक्सिंग ऑपरेशन में सुन्नता लाने का कोई कारण नहीं है।
माइक हॉलर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.