পাইথনের স্ট্রিংয়ের ভিতরে আমি কীভাবে কোনও চরিত্রের অবস্থান পেতে পারি?
পাইথনের স্ট্রিংয়ের ভিতরে আমি কীভাবে কোনও চরিত্রের অবস্থান পেতে পারি?
উত্তর:
এর জন্য দুটি স্ট্রিং পদ্ধতি রয়েছে 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()
কিন্তু বাড়ান raiseValueError
কেবলমাত্র সম্পূর্ণতার জন্য, যদি আপনাকে কোনও স্ট্রিংয়ে কোনও চরিত্রের সমস্ত অবস্থানের সন্ধান করতে হয় তবে আপনি নিম্নলিখিতটি করতে পারেন:
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])
স্থিতিপত্রকে একটি তালিকা ফর্ম্যাটে রাখবে । আমি এটি সত্যিই সহায়ক মনে করি
>>> 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()
আমি দেখেছি নকলের জন্য আপনি একই সূচকটি ফিরে পাবেন back
উদাহরণ স্বরূপ:
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]
সমস্ত সূচকে দ্রুত অ্যাক্সেসের জন্য নম্পু সহ একটি সমাধান:
string_array = np.array(list(my_string))
char_indexes = np.where(string_array == 'C')