рдореБрдЦреНрдп рд╕рд╛рдордЧреНрд░реА рдкрд░ рдЬрд╛рдПрдБ

Python рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕рд░реНрдЪ рдФрд░ рд░рд┐рдкреНрд▓реЗрд╕: in, .find(), .index(), .count(), рдФрд░ .replace()

рдЖрдзреБрдирд┐рдХ Python рдореЗрдВ рд╕рдмрд╕реНрдЯреНрд░рд┐рдВрдЧ рдЦреЛрдЬрдиреЗ, рдЧрд┐рдирдиреЗ рдФрд░ рдмрджрд▓рдиреЗ рдХреЗ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдкреИрдЯрд░реНрдиред
┬╖ 8 рдорд┐ре░ рдкрдврд╝реЗрдВ

AI рдХреЗ рд╕рд╛рде рдЦреЛрдЬреЗрдВ

рдХрд┐рд╕реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдкрд╛рда рдореМрдЬреВрдж рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП .find() рдпрд╛ .index() рдХрд╛ рд╕рд╣рд╛рд░рд╛ рд▓реЗрдирд╛ рдЖрдо рд╣реИтАФрдФрд░ рдлрд┐рд░ ValueError рдЬреИрд╕реА рдЕрдЬреАрдм рд╕рдорд╕реНрдпрд╛рдУрдВ рдпрд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреА рд╢реБрд░реБрдЖрдд рдкрд░ рдЫреВрдЯрд╛ рд╣реБрдЖ рдорд┐рд▓рд╛рди рджреЗрдЦрдиреЗ рдХреЛ рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИред рдХреЗрд╕-рд╕реЗрдВрд╕рд┐рдЯрд┐рд╡рд┐рдЯреА, рд╕реНрд▓рд╛рдЗрд╕ рд╕реАрдорд╛рдУрдВ рдореЗрдВ рдПрдХ-рд╕реЗ-рдЧрд▓рддреА, рдФрд░ рдпрд╣ рддрдереНрдп рдХрд┐ str рдкрд░ .contains() рдореЗрдердб рдирд╣реАрдВ рд╣реИ, рднреНрд░рдо рдмрдврд╝рд╛рддреЗ рд╣реИрдВред рд╕рдорд╛рдзрд╛рди рд╕реАрдзрд╛ рд╣реИ: рдХрд╛рдо рдХреЗ рд▓рд┐рдП рд╕рд╣реА рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдЕрд╕реНрддрд┐рддреНрд╡ рдЬрд╛рдВрдЪ рдХреЗ рд▓рд┐рдП рд╣рдо in рдСрдкрд░реЗрдЯрд░ рдкрд░, рд╕реНрдерд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП .find()/.index() рдкрд░, рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП .count() рдкрд░, рдФрд░ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЗ рд▓рд┐рдП .replace() рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реИрдВтАФрдФрд░ рдЬрдм рдХреЗрд╕-рдЗрдирд╕реЗрдВрд╕рд┐рдЯрд┐рд╡рд┐рдЯреА рдорд╛рдпрдиреЗ рд░рдЦрддреА рд╣реИ, рддреЛ рдХреБрдЫ Unicode-рд╕реБрд░рдХреНрд╖рд┐рдд рддрдХрдиреАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

Python рд╕рдмрд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕рд░реНрдЪ рдХреЛ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИ

Python рдХреА рдЯреЗрдХреНрд╕реНрдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ Unicode рд╣реЛрддреА рд╣реИрдВред рд╕рдмрд╕реНрдЯреНрд░рд┐рдВрдЧ рдСрдкрд░реЗрд╢рди рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдХреЗрд╕-рд╕реЗрдВрд╕рд┐рдЯрд┐рд╡ рд╣реИрдВ рдФрд░ рддреЗрдЬрд╝реА рдХреЗ рд▓рд┐рдП C рдореЗрдВ рдЗрдореНрдкреНрд▓реАрдореЗрдВрдЯ рдХрд┐рдП рдЧрдП рд╣реИрдВред рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рд╕реАрдзрд╛ рддрд░реАрдХрд╛ рдХрд┐ рдХреЛрдИ рдЯреЗрдХреНрд╕реНрдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рднреАрддрд░ рдЖрддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ, in рдСрдкрд░реЗрдЯрд░ рд╣реИ, рдЬреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ __contains__() рдЗрдореНрдкреНрд▓реАрдореЗрдВрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП Boolean рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдЬрдм рдЖрдкрдХреЛ рд╕реНрдерд╛рди рдпрд╛ рдЧрдгрдирд╛ рдЪрд╛рд╣рд┐рдП, рддреЛ рд╕рдорд░реНрдкрд┐рдд str рдореЗрдердбреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рд╡реИрдХрд▓реНрдкрд┐рдХ start рдФрд░ end рдкреИрд░рд╛рдореАрдЯрд░реНрд╕ рд╕реНрд▓рд╛рдЗрд╕ рд╕реЗрдореИрдЯрд┐рдХреНрд╕ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реИрдВ: start рд╕рдорд╛рд╡реЗрд╢реА рд╣реИ; end рдмрд╣рд┐рд╖реНрдХреГрдд рд╣реИред

in рдХреЗ рд╕рд╛рде рд╕рдорд╛рд╡реЗрд╢рди

рдЬрдм рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдпрд╣ рдкрд░рд╡рд╛рд╣ рд╣реИ рдХрд┐ рд╕рдмрд╕реНрдЯреНрд░рд┐рдВрдЧ рдореМрдЬреВрдж рд╣реИ рдпрд╛ рдирд╣реАрдВ, рддреЛ "needle" in haystack рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдпрд╣ рдкрдардиреАрдп рд╣реИ рдФрд░ рдЗрдВрдбреЗрдХреНрд╕ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рд╕реЗ рдмрдЪрд╛рддрд╛ рд╣реИред

text = "Banana bread"
print("ban" in text)   # False (case-sensitive)
print("Ban" in text)   # True

рдХреЗрд╕-рдЗрдирд╕реЗрдВрд╕рд┐рдЯрд┐рд╡ рдЬрд╛рдВрдЪ рдХреЗ рд▓рд┐рдП, рджреЛрдиреЛрдВ рдУрд░ рдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝ рдХрд░реЗрдВред .casefold() .lower() рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ Unicode-рд╕рдЪреЗрдд рд╣реИ рдФрд░ рдХреЗрд╕рд▓реЗрд╕ рдорд┐рд▓рд╛рди рдХреЗ рд▓рд┐рдП рдореЗрд░рд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реИред

pattern = "ban"
print(pattern.casefold() in text.casefold())  # True
  • рдХрдм рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ: рддреНрд╡рд░рд┐рдд рдЕрд╕реНрддрд┐рддреНрд╡ рдЬрд╛рдВрдЪ, рдЗрдирдкреБрдЯ рд╡реИрд▓рд┐рдбреЗрд╢рди, рд╕реВрдЪрд┐рдпреЛрдВ рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдирд╛ред
  • рдХрд┐рдирд╛рд░реА рдорд╛рдорд▓рд╛: "" in s рд╣рдореЗрд╢рд╛ True рд╣реЛрддрд╛ рд╣реИ (рдЦрд╛рд▓реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣рд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рд╣реЛрддреА рд╣реИ)ред

str.find() рдореЗрдердб

рд╕рд┐рдиреНрдЯреИрдХреНрд╕

str.find() рд╕рдмрд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛ рд╕рдмрд╕реЗ рдХрдо рдЗрдВрдбреЗрдХреНрд╕ рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдпрд╛ рди рдорд┐рд▓рдиреЗ рдкрд░ -1ред рд╡реИрдХрд▓реНрдкрд┐рдХ start рдФрд░ end рдЦреЛрдЬ рдХреЛ рд╕реАрдорд┐рдд рдХрд░рддреЗ рд╣реИрдВред

s.find(substring, start=0, end=len(s))

рдЙрджрд╛рд╣рд░рдг рдФрд░ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ

рдЬрдм рдЖрдкрдХреЛ рд╕реНрдерд┐рддрд┐ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЖрдк рдПрдХреНрд╕реЗрдкреНрд╢рди рдХреЗ рдмрд┐рдирд╛ тАЬрдирд╣реАрдВ рдорд┐рд▓рд╛тАЭ рдорд╛рди рд╕рдВрднрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ .find() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

tagline = "Ship fast. Fix faster."
print(tagline.find("fast"))         # 5
print(tagline.find("fast", 6))      # 16
print(tagline.find("slow"))         # -1

рдЕрд╕реНрддрд┐рддреНрд╡ рдЬрд╛рдВрдЪ рдХреЗ рд▓рд┐рдП if s.find(sub): рди рд▓рд┐рдЦреЗрдВред рдпрджрд┐ рдорд┐рд▓рд╛рди рдЗрдВрдбреЗрдХреНрд╕ 0 рдкрд░ рд╣реИ, рддреЛ рд╢рд░реНрдд falsey рд╣реЛрдЧреАред

name = "Alice"
if name.find("A"):         # Wrong: 0 is Falsey
    print("Found A")       # Will not run
if name.find("A") != -1:   # Correct
    print("Found A")

str.index() рдореЗрдердб

рд╕рд┐рдиреНрдЯреИрдХреНрд╕

.index() .find() рдЬреИрд╕рд╛ рд╣реИ, рдкрд░ рд╕рдмрд╕реНрдЯреНрд░рд┐рдВрдЧ рди рдорд┐рд▓рдиреЗ рдкрд░ ValueError рдЙрдард╛рддрд╛ рд╣реИред

s.index(substring, start=0, end=len(s))

рдЙрджрд╛рд╣рд░рдг рдФрд░ рдХрдм рдЪреБрдиреЗрдВ

рдЬрдм рд╕рдмрд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛ рд╣реЛрдирд╛ рдЕрдирд┐рд╡рд╛рд░реНрдп рд╣реЛ рдФрд░ рдЕрд╕рдлрд▓рддрд╛ рдкрд░ рдПрдХреНрд╕реЗрдкреНрд╢рди рд╕рд╣реА рдлрд╝реЗрд▓реНрдпреЛрд░ рдореЛрдб рд╣реЛ, рддрдм .index() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

product = "USB-C Cable"
print(product.index("Cable"))  # 6

try:
    product.index("HDMI")
except ValueError:
    print("Required label missing")

str.count() рдореЗрдердб

рд╕рд┐рдиреНрдЯреИрдХреНрд╕

.count() рдЧреИрд░-рдУрд╡рд░рд▓реИрдкрд┐рдВрдЧ рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреА рд╕рдВрдЦреНрдпрд╛ рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдпрд╣ start рдФрд░ end рд╕реАрдорд╛рдПрдБ рднреА рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред

s.count(substring, start=0, end=len(s))

рдЙрджрд╛рд╣рд░рдг рдФрд░ рдХрд┐рдирд╛рд░реА рдорд╛рдорд▓реЗ

рддреНрд╡рд░рд┐рдд рдЧрд┐рдирддреА рдХреЗ рд▓рд┐рдП .count() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, regex рдХреЗ рдмрд┐рдирд╛ред

log_line = "ERROR: timeout. ERROR: retry. ERROR: gave up."
print(log_line.count("ERROR"))     # 3
print(log_line.count("WARN"))      # 0

рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓рд╛: рдЦрд╛рд▓реА рд╕реНрдЯреНрд░рд┐рдВрдЧред

print("abc".count(""))   # 4 (len(s) + 1)

str.replace() рдореЗрдердб

.replace() рдПрдХ рдирдИ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ old рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЛ new рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд░рд┐рдкреНрд▓реЗрд╕рдореЗрдВрдЯ рд╕реАрдорд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП count рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

s.replace(old, new, count=-1)

рд╕рдмрд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЛ рдмрджрд▓рдирд╛

рдпрд╣ рдореЗрдердб рдЗрди-рдкреНрд▓реЗрд╕ рдирд╣реАрдВ рд╣реИ; рдпрд╣ рдПрдХ рдХреЙрдкреА рд▓реМрдЯрд╛рддрд╛ рд╣реИред

message = "The red house is between the blue house and the old house"
print(message.replace("house", "car"))
# The red car is between the blue car and the old car

print(message.replace("house", "car", 2))
# The red car is between the blue car and the old house

рдХреЗрд╕-рдЗрдирд╕реЗрдВрд╕рд┐рдЯрд┐рд╡ рд░рд┐рдкреНрд▓реЗрд╕рдореЗрдВрдЯ

рдореВрд▓ рдХреЗрд╕-рдкреИрдЯрд░реНрди рдХреЛ рдмрдирд╛рдП рд░рдЦрддреЗ рд╣реБрдП рдХреЗрд╕-рдЗрдирд╕реЗрдВрд╕рд┐рдЯрд┐рд╡ рд░рд┐рдкреНрд▓реЗрд╕рдореЗрдВрдЯ рдХреЗ рд▓рд┐рдП re.IGNORECASE рдХреЗ рд╕рд╛рде re.sub() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдпрд╛ рдпрджрд┐ рдЖрдкрдХреЛ рдореВрд▓ рдХреЗрд╕рд┐рдВрдЧ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рддреЛ .casefold() рд╕реЗ рдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝ рдХрд░реЗрдВред

.casefold() рдХреЗ рд╕рд╛рде рдХреЗрд╕-рдЗрдирд╕реЗрдВрд╕рд┐рдЯрд┐рд╡ рдорд┐рд▓рд╛рди

.casefold() рдЖрдХреНрд░рд╛рдордХ, Unicode-рд╕рдЪреЗрдд рдХреЗрд╕ рдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХреЗрд╕рд▓реЗрд╕ рдЬрд╛рдВрдЪ рдХреЗ рд▓рд┐рдП .lower() рдкрд░ рд╡рд░реАрдп рд╣реИред

query = "stra├Яe"           # German 'stra├Яe'
text  = "STRASSE und mehr" # Uppercase variant
print(query.casefold() in text.casefold())  # True

рдкреНрд░рд┐рдлрд┐рдХреНрд╕ рдФрд░ рд╕рдлрд┐рдХреНрд╕ рдХреЗ рд▓рд┐рдП рд╕рдВрдмрдВрдзрд┐рдд рдЯреВрд▓реНрд╕

рдЬреНрдЮрд╛рдд рд╢реБрд░реБрдЖрдд/рдЕрдВрдд рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рдд рдореЗрдердбреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВтАФрд╡реЗ рд╕реНрд▓рд╛рдЗрд╕рд┐рдВрдЧ рдпрд╛ regex рд╕реЗ рддреЗрдЬрд╝ рдФрд░ рд╕реНрдкрд╖реНрдЯ рд╣реИрдВ:

  • s.startswith(prefix) рдФрд░ s.endswith(suffix) (рдПрдХрд╛рдзрд┐рдХ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рд▓рд┐рдП рдЯреНрдпреВрдкрд▓ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ)
  • s.removeprefix(prefix) рдФрд░ s.removesuffix(suffix) (Python 3.9+)
filename = "draft_report_v2.pdf"
print(filename.removeprefix("draft_"))  # report_v2.pdf
print(filename.endswith((".pdf", ".docx")))  # True

Pandas рдХреЙрд▓рдореНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛

DataFrame рдХреЙрд▓рдо рдореЗрдВ рдХрдИ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЛ рдЦреЛрдЬрддреЗ рд╕рдордп, рд╡реЗрдХреНрдЯрд░рд╛рдЗрдЬрд╝реНрдб рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдердбреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рд▓рд┐рдЯрд░рд▓ рдЯреЗрдХреНрд╕реНрдЯ рдорд┐рд▓рд╛рди рдХреЗ рд▓рд┐рдП regex=False рд╕реЗрдЯ рдХрд░реЗрдВред

import pandas as pd

cities = pd.Series(["New York", "Yorktown", None, "Toronto"], dtype="string")
mask = cities.str.contains("York", regex=False, na=False)
print(mask.tolist())  # [True, True, False, False]

рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ:

  • рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ regex=True рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП . рдЬреИрд╕реЗ рд╡рд┐рд╢реЗрд╖ рдЕрдХреНрд╖рд░ рддрдм рддрдХ рдХрд┐рд╕реА рднреА рдЕрдХреНрд╖рд░ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреЗ рд╣реИрдВ рдЬрдм рддрдХ рдЖрдк regex рдЕрдХреНрд╖рдо рдирд╣реАрдВ рдХрд░рддреЗред
  • рдирд▓ рдорд╛рдиреЛрдВ рдХреЛ na=... рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрднрд╛рд▓реЗрдВред StringDtype рдХреЗ рд╕рд╛рде, рдорд┐рд╕рд┐рдВрдЧ рдорд╛рди рдорд╛рд╕реНрдХ рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ False рд╣реЛрддреЗ рд╣реИрдВред

рдЖрдо рдЧрд▓рддрд┐рдпрд╛рдБ рдФрд░ рдХрд┐рдирд╛рд░реА рдорд╛рдорд▓реЗ

  • str рдкрд░ .contains() рдирд╣реАрдВ: "sub" in s рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред "abc".contains("a") AttributeError рдЙрдард╛рддрд╛ рд╣реИред

  • .find() рдХреА truthiness: рдЗрдВрдбреЗрдХреНрд╕ 0 falsey рд╣реИ; != -1 рд╕реЗ рддреБрд▓рдирд╛ рдХрд░реЗрдВ рдпрд╛ рдЕрд╕реНрддрд┐рддреНрд╡ рдХреЗ рд▓рд┐рдП in рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреЗрдВред

  • .index() raises: рдпрджрд┐ рд╕рдмрд╕реНрдЯреНрд░рд┐рдВрдЧ рдЕрдиреБрдкрд╕реНрдерд┐рдд рд╣реЛ рд╕рдХрддреА рд╣реИ, рддреЛ ValueError рдХреЛ рд╕рдВрднрд╛рд▓реЗрдВред

  • рдЦрд╛рд▓реА рд╕рдмрд╕реНрдЯреНрд░рд┐рдВрдЧ: "" in s True рд╣реИ; s.find("") 0 рд▓реМрдЯрд╛рддрд╛ рд╣реИ; s.count("") len(s)+1 рд╣реЛрддрд╛ рд╣реИред

  • рдХреЗрд╕ рд╕реЗрдВрд╕рд┐рдЯрд┐рд╡рд┐рдЯреА: рдЬрдм рддрдХ рдЖрдк рдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝ рди рдХрд░реЗрдВ рдпрд╛ regex рдлреНрд▓реИрдЧреНрд╕ рди рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рд╕рднреА рдСрдкрд░реЗрд╢рди рдХреЗрд╕-рд╕реЗрдВрд╕рд┐рдЯрд┐рд╡ рд╣реЛрддреЗ рд╣реИрдВред

  • рдмрд╛рдЗрдЯреНрд╕ рдмрдирд╛рдо рдЯреЗрдХреНрд╕реНрдЯ: рдЦреЛрдЬ рдореЗрдВ bytes рдФрд░ str рдХреЛ рди рдорд┐рд▓рд╛рдПрдБ; рдкреНрд░рдХрд╛рд░ рдорд┐рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдХреЛрдб рдпрд╛ рдПрдиреНрдХреЛрдб рдХрд░реЗрдВред

  • рд╕рдмрд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реЗрдореИрдЯрд┐рдХреНрд╕: "ab" in "cat,bat" False рд╣реИ, рднрд▓реЗ рд╣реА "a" рдФрд░ "b" рдЕрд▓рдЧ-рдЕрд▓рдЧ рдореМрдЬреВрдж рд╣реЛрдВтАФрдорд┐рд▓рд╛рди рд╕рдиреНрдирд┐рд╣рд┐рдд (contiguous) рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╣реИрдВрдбреНрд╕-рдСрди рдЙрджрд╛рд╣рд░рдг рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ

рдпреЗ рдЫреЛрдЯреЗ рд╕реНрдирд┐рдкреЗрдЯреНрд╕ рд╕рд╣реА рдкреИрдЯрд░реНрди рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЖрдо рдЧреЙрдЯрдЪрд╛рдЬрд╝ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рддреЗ рд╣реИрдВред

рдЕрд╕реНрддрд┐рддреНрд╡ рдЬрд╛рдВрдЪ

headline = "Where's Waldo?"
print("Waldo" in headline)          # True
print("Wenda" in headline)          # False
print(headline.find("Waldo"))       # 8
print(headline.find("Wenda"))       # -1

start рдФрд░ end рдХреЗ рд╕рд╛рде рд╕реАрдорд┐рдд рдЦреЛрдЬ

End рдмрд╣рд┐рд╖реНрдХреГрдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЦреЛрдЬ рдХреА рд╕реНрдерд┐рддрд┐рдпрд╛рдБ рд╕реНрд▓рд╛рдЗрд╕ рд╕реЗрдореИрдЯрд┐рдХреНрд╕ рдХреЛ рджрд░реНрд╢рд╛рддреА рд╣реИрдВред

headline = "Where's Waldo?"
print(headline.find("Waldo", 0, 6))   # -1 (searching "Where'")
print(headline.find("Waldo", 0, 13))  # 8  (searching up to the 'o' in Waldo)

рдЧрд┐рдирддреА рдФрд░ рд░рд┐рдкреНрд▓реЗрд╕рдореЗрдВрдЯ

inventory = "apple, apple, pear, apple"
print(inventory.count("apple"))                # 3
print(inventory.replace("apple", "orange", 2)) # orange, orange, pear, apple

Python рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕рд░реНрдЪ рдФрд░ рд░рд┐рдкреНрд▓реЗрд╕ рдЕрднреНрдпрд╛рд╕ рдЙрджрд╛рд╣рд░рдг┬а

рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдореВрд╡реА рдмреНрд▓рд░реНрдмреНрд╕ рдХреА рд╕реВрдЪреА рдХреЛ рдкреНрд░реЛрд╕реЗрд╕ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЕрд╕реНрддрд┐рддреНрд╡ рдЬрд╛рдВрдЪ, рд╕реАрдорд┐рдд рдЦреЛрдЬ, рдФрд░ regex рдХреЗ рдмрд┐рдирд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░рд┐рдкреНрд▓реЗрд╕рдореЗрдВрдЯ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред

blurbs = [
    "Critics say the lead actor delivers a career-best performance.",
    "Fans argue the actor actor scene was intentionally repetitive.",
    "A clever cameo steals the show."
]

for blurb in blurbs:
    # Check whether "actor" appears between indexes 20 and 40 (end exclusive).
    window_has_actor = "actor".casefold() in blurb[20:40].casefold()
    if not window_has_actor:
        print("Window check: actor not found")
        continue

    # If "actor actor" appears, collapse to a single "actor".
    if "actor actor" in blurb:
        print(blurb.replace("actor actor", "actor"))
    # If "actor actor actor" appears, collapse to a single "actor".
    elif "actor actor actor" in blurb:
        print(blurb.replace("actor actor actor", "actor"))
    else:
        print(blurb)

рдЖрдЙрдЯрдкреБрдЯ:

Window check: actor not found
Fans argue the actor scene was intentionally repetitive.
Window check: actor not found

рдирд┐рд╖реНрдХрд░реНрд╖

рд╕рд░рд▓ рд╕рдорд╛рд╡реЗрд╢рди рдХреЗ рд▓рд┐рдП in рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рд╕реНрдерд╛рдиреЛрдВ рдХреА рдЬрд╝рд░реВрд░рдд рдкрд░ .find() рдпрд╛ .index(), рдЧреИрд░-рдУрд╡рд░рд▓реИрдкрд┐рдВрдЧ рдЧрд┐рдирддреА рдХреЗ рд▓рд┐рдП .count(), рдФрд░ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЗ рд▓рд┐рдП .replace()ред рдХреЗрд╕-рдЗрдирд╕реЗрдВрд╕рд┐рдЯрд┐рд╡ рдЬрд╛рдВрдЪ рдХреЗ рд▓рд┐рдП .casefold() рд╕реЗ рдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝ рдХрд░реЗрдВ, рдФрд░ рдЙрдЪрд┐рдд рд╣реЛрдиреЗ рдкрд░ рд╕рдорд░реНрдкрд┐рдд рдкреНрд░рд┐рдлрд┐рдХреНрд╕/рд╕рдлрд┐рдХреНрд╕ рд╣реЗрд▓реНрдкрд░реНрд╕ рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреЗрдВред рд╣рдо .find() рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ Boolean рдореЗрдВ рдХрдиреНрд╡рд░реНрдЯ рдХрд░рдиреЗ рд╕реЗ рдмрдЪрддреЗ рд╣реИрдВ рдФрд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛрдб рдХреЛ рд╕рд╣реА рдФрд░ рд╕реНрдкрд╖реНрдЯ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЦрд╛рд▓реА-рд╕рдмрд╕реНрдЯреНрд░рд┐рдВрдЧ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓рд╛ рдорд╛рдирддреЗ рд╣реИрдВред

рд╡рд┐рд╖рдп