Python'da bir dize alt dizesini nas─▒l bulabilirim?


Al─▒nan cevaba git


Python'da bir dizgiyi alt dizge alt─▒na alman─▒n, ├╝├ž├╝nc├╝ karakterden dizgenin sonuna kadar yeni bir dizge alman─▒n bir yolu var m─▒?

Belki gibi myString[2:end] ?

─░kinci k─▒sm─▒ terk etmek 'sonuna kadar' anlam─▒na geliyorsa ve ilk k─▒sm─▒ terk ederseniz, ba┼čtan ba┼člar m─▒?


1963









Cevap say─▒s─▒n─▒ say: 11






 >>> x = "Hello World!"
>>> x[2:]
'llo World!'
>>> x[:2]
'He'
>>> x[:-2]
'Hello Worl'
>>> x[-2:]
'd!'
>>> x[2:-2]
'llo Worl'
 

Python bu kavram─▒ ÔÇťdilimlemeÔÇŁ olarak adland─▒r─▒r ve sadece dizgilerden daha fazlas─▒ ├╝zerinde ├žal─▒┼č─▒r. Kapsaml─▒ bir tan─▒t─▒m i├žin buraya bir g├Âz at─▒n .


2945







Sadece kimsenin bahsetmedi─či gibi eksiksiz olmas─▒ i├žin. Dizi dilimine ├╝├ž├╝nc├╝ parametre bir ad─▒md─▒r. Bu nedenle bir dizgeyi ters ├ževirmek basittir:

 some_string[::-1]
 

Veya alternatif karakterleri se├žmek:

 "H-e-l-l-o- -W-o-r-l-d"[::2] # outputs "Hello World"
 

─░pte ileri ve geri ad─▒m atma kabiliyeti, dilimi ba┼čtan veya sondan dizilebilme ile tutarl─▒l─▒─č─▒ korur.


362







Substr () normal (yani PHP ve Perl) ┼ču ┼čekilde ├žal─▒┼č─▒r:

 s = Substr(s, beginning, LENGTH)
 

Yani parametreler beginning ve LENGTH .

Ancak Python'un davran─▒┼č─▒ farkl─▒; END (!) 'den sonra bir tane ba┼člamay─▒ bekliyor. Bu yeni ba┼člayanlar taraf─▒ndan tespit etmek zordur. Yani Substr (s, ba┼člang─▒├ž, LENGTH) i├žin do─čru de─či┼čtirme

 s = s[ beginning : beginning + LENGTH]
 

108







Bunu ba┼čarman─▒n yayg─▒n bir yolu dize dilimlemedir.

MyString[a:b] a dizininden (b - 1) dizine bir alt dizini verir.


53







Bir ├Ârnek burada eksik g├Âr├╝n├╝yor: tam (s─▒─č) kopya.

 >>> x = "Hello World!"
>>> x
'Hello World!'
>>> x[:]
'Hello World!'
>>> x==x[:]
True
>>>
 

Bu, dizi t├╝rlerinin bir kopyas─▒n─▒ olu┼čturmak i├žin kullan─▒lan ortak bir deyimdir (interned string'lerden de─čil) [:] ,. S─▒─č, bir listeyi kopyalar, bariz bir sebep olmadan kullan─▒lan Python listesi dilimi s├Âzdizimini g├Âr├╝n .


21







3. karakterden dizgenin sonuna kadar yeni bir dizge almak i├žin Python'da dizgiyi alt dizmek i├žin bir yol var m─▒?

Belki gibi myString[2:end] ?

Atamak veya e─čer Evet, bu ger├žekten ├žal─▒┼č─▒yor ba─člamak , isim, end sabit tekiz i├žin, None :

 >>> end = None
>>> myString = '1234567890'
>>> myString[2:end]
'34567890'
 

Dilim notasyonu 3 ├Ânemli arg├╝mana sahiptir:

  • ba┼čla
  • durdurmak
  • ad─▒m

Belirtilmedi─činde varsay─▒lan de─čerleri ┼čunlard─▒r None - ancak bunlar─▒ a├ž─▒k├ža ge├žebiliriz:

 >>> stop = step = None
>>> start = 2
>>> myString[start:stop:step]
'34567890'
 

─░kinci k─▒sm─▒ terk etmek 'sonuna kadar' anlam─▒na geliyorsa, ilk k─▒sm─▒ terk ederseniz, ba┼čtan ba┼člar m─▒?

Evet, ├Ârne─čin:

 >>> start = None
>>> stop = 2
>>> myString[start:stop:step]
'12'
 

Dilime ba┼člang─▒c─▒ ekledi─čimizi unutmay─▒n, ancak yaln─▒zca durmaya kadar devam ederiz ve dururuz.

Ad─▒m oldu─čunda None , dilim varsay─▒lan 1 olarak ad─▒m i├žin kullan─▒r . Negatif bir tamsay─▒ ile ad─▒m atarsan─▒z, Python ba┼čtan sonuna kadar gitmek i├žin yeterince ak─▒ll─▒.

 >>> myString[::-1]
'0987654321'
 

Dilim notasyonunu a├ž─▒klayaca─č─▒m cevab─▒mdaki dilim notasyonunu ayr─▒nt─▒l─▒ olarak a├ž─▒klar─▒m.


18







"Son" d─▒┼č─▒nda orada hakl─▒s─▒n. Buna dilim g├Âsterimi denir. ├ľrne─činiz ┼čunlar─▒ okumal─▒:

 new_sub_string = myString[2:]
 

─░kinci parametreyi d─▒┼čar─▒da b─▒rak─▒rsan─▒z, dolayl─▒ olarak dizenin sonu olur.


8







Tart─▒┼čmaya iki nokta eklemek istiyorum:

  1. Bunun None yerine "ba┼člang─▒├žtan" ÔÇőÔÇőveya "sondan sonuna" belirtmek i├žin bo┼č bir alan─▒ kullanabilirsiniz:

     'abcde'[2:None] == 'abcde'[2:] == 'cde'
     

    Bu, ├Âzellikle arg├╝man olarak bo┼č bir alan sa─člayamad─▒─č─▒n─▒z i┼člevlerde yararl─▒d─▒r:

     def substring(s, start, end):
        """Remove `start` characters from the beginning and `end` 
        characters from the end of string `s`.
    
        Examples
        --------
        >>> substring('abcde', 0, 3)
        'abc'
        >>> substring('abcde', 1, None)
        'bcde'
        """
        return s[start:end]
     
  2. Python'un dilim nesneleri var:

     idx = slice(2, None)
    'abcde'[idx] == 'abcde'[2:] == 'cde'
     

6







Belki de ka├ž─▒rd─▒m ama bu sayfada orijinal sorulara tam bir cevap bulamad─▒m ├ž├╝nk├╝ de─či┼čkenler burada daha fazla tart─▒┼č─▒lm─▒yor. Bu y├╝zden aramaya devam etmek zorunda kald─▒m.

Hen├╝z yorum yapmama izin vermedi─čim i├žin, sonucumu buraya ekleyeyim. Bu sayfaya eri┼čirken ilgilenen tek ki┼či olmad─▒─č─▒na eminim:

  >>>myString = 'Hello World'
 >>>end = 5

 >>>myString[2:end]
 'llo'
 

─░lk k─▒sm─▒ terk edersen,

  >>>myString[:end]
 'Hello' 
 

Ve e─čer ┼čunu b─▒rakt─▒ysan─▒z: ortas─▒nda da 5. karakter olacak en basit alt dizgiye sahip olursunuz (0 ile ba┼člayan say─▒m, bu durumda bo┼č kal─▒r):

  >>>myString[end]
 ' '
 

3







MyString 6 ofset ba┼člar ve uzunlu─ču 9 olan bir hesap numaras─▒ i├žeriyorsa, o zaman hesap numaras─▒ bu ┼čekilde ├ž─▒karabilir: acct = myString[6:][:9] .

OP bunu kabul ederse, deneysel bir ┼čekilde denemek isteyebilirler,

 myString[2:][:999999]
 

├çal─▒┼č─▒yor - hata olu┼čmuyor ve varsay─▒lan 'string padding' olu┼čmuyor.


3







Sabit kodlanm─▒┼č dizinleri kullanmak bir kar─▒┼č─▒kl─▒k olabilir.

Bunu ├Ânlemek i├žin, Python yerle┼čik bir nesne sunar slice() .

 string = "my company has 1000$ on profit, but I lost 500$ gambling."
 

Ne kadar para kald─▒─č─▒n─▒ bilmek istiyorsak.

Normal ├ž├Âz├╝m:

 final = int(string[15:19]) - int(string[43:46])
print(final)
>>>500
 

Dilimleri kullanarak:

 EARNINGS = slice(15, 19)
LOSSES = slice(43, 46)
final = int(string[EARNINGS]) - int(string[LOSSES])
print(final)
>>>500
 

Dilimi kullanarak okunabilirlik kazan─▒rs─▒n─▒z.


0


2016-08-31