Python'un 'i├žerir' alt dizgisi y├Ântemi var m─▒?


Al─▒nan cevaba git


Python'da bir y├Ântem string.contains veya string.indexof y├Ântem ar─▒yorum .

Ben yapmak istiyorum:

 if not somestring.contains("blah"):
   continue
 

3601









Cevap say─▒s─▒n─▒ say: 10






in Operat├Âr├╝ kullanabilirsiniz :

 if "blah" not in somestring: 
    continue
 

5768







Bu sadece bir alt dize aramas─▒ysa kullanabilirsiniz string.find("substring") .

Sen biraz dikkatli olmak gerekiyor find , index ve in onlar aramalar alt dize gibi olsa. Ba┼čka bir deyi┼čle, bu:

 s = "This be a string"
if s.find("is") == -1:
    print "No 'is' here!"
else:
    print "Found 'is' in the string."
 

Bu yazd─▒racak Found 'is' in the string. , Benzer if "is" in s: etmek de─čerlendirirsiniz True . ─░stedi─činiz bu olabilir veya olmayabilir.


602







if needle in haystack: @Michael'in dedi─či gibi normal kullan─▒md─▒r - in operat├Âre g├╝venir, y├Ântem ├ža─čr─▒s─▒ndan daha okunakl─▒ ve h─▒zl─▒d─▒r.

E─čer bir operat├Âr yerine ger├žekten bir y├Ânteme ihtiyac─▒n─▒z varsa (├Ârne─čin, key= ├žok tuhaf bir s─▒ralama i├žin biraz garip yapmak i├žin ...?), Olur 'haystack'.__contains__ . Ancak, ├Ârne─čin bir kullan─▒m i├žin oldu─čundan, if ger├žekten ne dedi─činizi demek istemezsiniz ;-). Do─črudan ├Âzel y├Ântemleri kullanmak iyi bir bi├žim de─čildir (ne de okunabilir ne de verimli) - bunun yerine, kendilerine yetki veren operat├Ârler ve yerle┼čikler arac─▒l─▒─č─▒yla kullan─▒lmas─▒ ama├žlanm─▒┼čt─▒r.


162







Python'un bir dize var substring y├Ântemi var m─▒?

Evet, ancak Python'un yerine kullanman─▒z gereken bir kar┼č─▒la┼čt─▒rma i┼čleci var, ├ž├╝nk├╝ dil kullan─▒m─▒ niyetinde ve di─čer programc─▒lar onu kullanman─▒z─▒ bekliyor. Bu anahtar kelime, in kar┼č─▒la┼čt─▒rma operat├Âr├╝ olarak kullan─▒lan:

 >>> 'foo' in '**foo**'
True
 

Orijinal sorunun sordu─ču z─▒tt─▒ (tamamlay─▒c─▒) not in :

 >>> 'foo' not in '**foo**' # returns False
False
 

Bu anlamsal olarak ayn─▒d─▒r not 'foo' in '**foo**' fakat okunabilirlik geli┼čimi olarak dilde ├žok daha okunakl─▒ ve a├ž─▒k├ža sa─članm─▒┼čt─▒r.

Kullanmaktan ka├ž─▒n─▒n __contains__ , find ve index

S├Âz verdi─čimiz gibi, i┼čte contains y├Ântem:

 str.__contains__('**foo**', 'foo')
 

d├Âner True . Bu i┼člevi superstring ├Ârne─činden de ├ža─č─▒rabilirsiniz:

 '**foo**'.__contains__('foo')
 

Ama yapma. Alt ├žizgi ile ba┼člayan y├Ântemler anlamsal olarak ├Âzel kabul edilir. Bunu kullanman─▒n tek nedeni in ve not in i┼člevselli─čini geni┼čletmektir (├Ârn. Alt s─▒n─▒flarsa str ):

 class NoisyString(str):
    def __contains__(self, other):
        print('testing if "{0}" in "{1}"'.format(other, self))
        return super(NoisyString, self).__contains__(other)

ns = NoisyString('a string with a substring inside')
 

ve ┼čimdi:

 >>> 'substring' in ns
testing if "substring" in "a string with a substring inside"
True
 

Ayr─▒ca, a┼ča─č─▒daki dize y├Ântemlerinden ka├ž─▒n─▒n:

 >>> '**foo**'.index('foo')
2
>>> '**foo**'.find('foo')
2

>>> '**oo**'.find('foo')
-1
>>> '**oo**'.index('foo')

Traceback (most recent call last):
  File "<pyshell#40>", line 1, in <module>
    '**oo**'.index('foo')
ValueError: substring not found
 

Di─čer dillerin do─črudan alt dizeleri s─▒nama y├Ântemleri yoktur ve bu nedenle bu t├╝r y├Ântemleri kullanman─▒z gerekir, ancak Python ile in kar┼č─▒la┼čt─▒rma i┼člecini kullanmak ├žok daha etkilidir .

Performans kar┼č─▒la┼čt─▒rmalar─▒

Ayn─▒ hedefe ula┼čmak i├žin ├že┼čitli yollar─▒ kar┼č─▒la┼čt─▒rabiliriz.

 import timeit

def in_(s, other):
    return other in s

def contains(s, other):
    return s.__contains__(other)

def find(s, other):
    return s.find(other) != -1

def index(s, other):
    try:
        s.index(other)
    except ValueError:
        return False
    else:
        return True



perf_dict = {
'in:True': min(timeit.repeat(lambda: in_('superstring', 'str'))),
'in:False': min(timeit.repeat(lambda: in_('superstring', 'not'))),
'__contains__:True': min(timeit.repeat(lambda: contains('superstring', 'str'))),
'__contains__:False': min(timeit.repeat(lambda: contains('superstring', 'not'))),
'find:True': min(timeit.repeat(lambda: find('superstring', 'str'))),
'find:False': min(timeit.repeat(lambda: find('superstring', 'not'))),
'index:True': min(timeit.repeat(lambda: index('superstring', 'str'))),
'index:False': min(timeit.repeat(lambda: index('superstring', 'not'))),
}
 

Ve ┼čimdi g├Âr├╝yoruz ki in , kullan─▒m di─čerlerinden daha h─▒zl─▒. E┼čde─čer bir i┼člem yapmak i├žin daha az zaman daha iyidir:

 >>> perf_dict
{'in:True': 0.16450627865128808,
 'in:False': 0.1609668098178645,
 '__contains__:True': 0.24355481654697542,
 '__contains__:False': 0.24382793854783813,
 'find:True': 0.3067379407923454,
 'find:False': 0.29860888058124146,
 'index:True': 0.29647137792585454,
 'index:False': 0.5502287584545229}
 

155







in Python dizeleri ve listeleri

in Y├Ântemle ilgili kendileri i├žin konu┼čan birka├ž yararl─▒ ├Ârnek :

 "foo" in "foobar"
True

"foo" in "Foobar"
False

"foo" in "Foobar".lower()
True

"foo".capitalize() in "Foobar"
True

"foo" in ["bar", "foo", "foobar"]
True

"foo" in ["fo", "o", "foobar"]
False
 

Uyar─▒. Listeler yinelenebilir ve in y├Ântem yaln─▒zca dizelerde de─čil yinelemelerde de etkilidir.


46







Yani g├Âr├╝n├╝┼če g├Âre vekt├Ârel kar┼č─▒la┼čt─▒rma i├žin benzer bir ┼čey yoktur. Bunu yapmak i├žin a├ž─▒k bir Python yolu:

 names = ['bob', 'john', 'mike']
any(st in 'bob and john' for st in names) 
>> True

any(st in 'mary and jane' for st in names) 
>> False
 

35


2015-07-17





Mutluysan─▒z "blah" in somestring , ancak bunun bir i┼člev / y├Ântem ├ža─čr─▒s─▒ olmas─▒n─▒ istiyorsan─▒z, muhtemelen bunu yapabilirsiniz

 import operator

if not operator.contains(somestring, "blah"):
    continue
 

Python'daki t├╝m operat├Ârler , dahil olmak ├╝zere operat├Âr mod├╝l├╝nde az ├žok bulunabilir in .


30







Kullanabilirsiniz y.count() .

Bir alt dizgenin bir dizgede g├Âr├╝nd├╝─č├╝ say─▒n─▒n tamsay─▒ de─čerini d├Ând├╝r├╝r.

├ľrne─čin:

 string.count("bah") >> 0
string.count("Hello") >> 1
 

19







─░┼čte cevab─▒n─▒z:

 if "insert_char_or_string_here" in "insert_string_to_search_here":
    #DOSTUFF
 

Yanl─▒┼č olup olmad─▒─č─▒n─▒ kontrol etmek i├žin:

 if not "insert_char_or_string_here" in "insert_string_to_search_here":
    #DOSTUFF
 

VEYA:

 if "insert_char_or_string_here" not in "insert_string_to_search_here":
    #DOSTUFF
 

15







Olu┼čumlar─▒ almak i├žin normal ifadeleri kullanabilirsiniz:

 >>> import re
>>> print(re.findall(r'( |t)', to_search_in)) # searches for t or space
['t', ' ', 't', ' ', ' ']
 

5



─░lgili yay─▒nlar


Python'un ├╝├žl├╝ bir ┼čartl─▒ operat├Âr├╝ var m─▒?

Dize alt dize i├žerip i├žermedi─čini nas─▒l kontrol edebilirim? [├žift]

Python'un s─▒n─▒flarda ÔÇť├ÂzelÔÇŁ de─či┼čkenleri var m─▒?

Python'un d├╝zenlenmi┼č bir seti var m─▒?

Python'un do─čal s─▒ralama dizesi i├žin yerle┼čik bir i┼člevi var m─▒?

`1 ..__ truediv__` nedir? Python'un .. (ÔÇťnokta noktaÔÇŁ) notasyonu s├Âzdizimi var m─▒?

Python'un bir paket / mod├╝l y├Ânetim sistemi var m─▒?

Java'n─▒n bir yol birle┼čtirme y├Ântemi var m─▒? [├žift]

Python'un s─▒ralanm─▒┼č bir listesi var m─▒?

RichTextBox (WPF), "Text" string ├Âzelli─čine sahip de─čil

Etiketle ilgili di─čer sorular [python]


C# Gizli ├ľzellikleri? [kapal─▒]

GitÔÇÖteki yerel komisyonlar─▒ atmak

LINQ Toplam algoritmas─▒ a├ž─▒kland─▒

JQuery'deki bir SELECT ├Â─česinde belirli bir se├žene─či nas─▒l se├žersiniz?

^ M linebreak'i vim'de a├ž─▒lan bir dosyada 'normal' linebreak'ye nas─▒l d├Ân├╝┼čt├╝rebilirim?

Vim'de tek bir tamponu (├žo─čundan) nas─▒l kapatabilirim?

Bash ├ž─▒k─▒┼č─▒nda boru ├ž─▒k─▒┼č─▒ ve yakalama ├ž─▒k─▒┼č durumu

GHC'de Oto-Uzmanl─▒─č─▒n Ge├ži┼či

UITableview: Baz─▒ Sat─▒rlar i├žin Se├žimi Devre D─▒┼č─▒ B─▒rakma, Di─čerleri De─čil

Elasticsearch'teki par├žalar ve kopyalar