পাইথন চরিত্রের অবস্থান কীভাবে পাবেন?


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()কিন্তু বাড়ান raiseValueError


127

কেবলমাত্র সম্পূর্ণতার জন্য, যদি আপনাকে কোনও স্ট্রিংয়ে কোনও চরিত্রের সমস্ত অবস্থানের সন্ধান করতে হয় তবে আপনি নিম্নলিখিতটি করতে পারেন:

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

যা ফিরে আসবে [4, 9]


4
পাইথন 3 এ, আমি একটি সিনট্যাক্স ত্রুটি পেয়েছি - এটি কীভাবে সংশোধন করা উচিত?
শান

19
@ শিয়ান: মুদ্রণ বিবৃতি সরানো হয়েছে। কেবলমাত্র ফাংশন ফর্মটি রয়ে গেছে। জ্বালাময়ী, তবে উত্তরটি কেবল সেই চূড়ান্ত পংক্তিতে পরিবর্তন করা যায়: print( [pos for pos, char in enumerate(s) if char == c])
ন্যাট

3
foo = ( [pos for pos, char in enumerate(s) if char == c])স্থিতিপত্রকে একটি তালিকা ফর্ম্যাটে রাখবে । আমি এটি সত্যিই সহায়ক মনে করি
3nrique0

এটি 0 সূচকযুক্ত, 0123 1234 এর বিপরীতে, সুতরাং আসল অবস্থান 5, 10
কেএসটিসি

এটি যত দ্রুত হতে পারে? যদি কেউ এনপি.আররে ব্যবহার করে তবে দীর্ঘতর কিছুর জন্য পারফরম্যান্সে কোনও লাভ হতে পারে?
সেব

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
ধন্যবাদ আমাকে বলুন কীভাবে আমরা স্ট্রিংয়ের স্ট্রিংগুলি প্রদত্ত অবস্থান অনুসারে পেতে পারি ...
ব্যবহারকার 244470

1
@ অরং: সাবস্ট্রিংয়ের ব্যবহার স্লাইসিংয়ের জন্য: str[from:to]কোথায় fromএবং toসূচকগুলি
এলি বেন্ডারস্কি

s.find () ফেরত -1 যদি স্ট্রিং না পাওয়া যায়
ইভগেনিই

এস স্টার্ক () অনুসন্ধানের সন্ধান না পাওয়াতে একটি মান উত্থাপন করে। 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()আমি দেখেছি নকলের জন্য আপনি একই সূচকটি ফিরে পাবেন 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জিনিস এই ধরণের জন্য ভাল।
o11c

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

দুজনের মধ্যে পার্থক্য কী তা জানতে সম্ভবত আপনি ডকুমেন্টেশনটি একবার দেখতে চান ।


সেই লিঙ্কযুক্ত ডকুমেন্টেশন থেকে: এস স্টার্ক () অনুসন্ধানের সন্ধান না পাওয়াতে একটি ভ্যালুআরর উত্থাপন করে। 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
দয়া করে এই পদ্ধতিটি ব্যবহার করবেন না। একটি সাধারণ স্ট্রিং ইন্ডেক্সিং অপারেশনে নাম্পি আনার কোনও কারণ নেই।
মাইক হোলার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.