Bagaimana Anda menemukan semua kemunculan substring dalam string dengan python?

Substring adalah urutan karakter yang berkelanjutan dalam sebuah String. Misalnya,

Number of substring occurrences: 2
Number of substring occurrences: 1
2 adalah substring dari
Number of substring occurrences: 2
Number of substring occurrences: 1
3

String dalam Python adalah larik byte yang merepresentasikan karakter Unicode dan salah satu tipe data yang paling umum digunakan untuk merepresentasikan data dalam format yang dapat dibaca manusia

Pada artikel ini kita akan belajar cara menghitung jumlah kemunculan substring tertentu dalam sebuah string dengan Python

Temukan Semua Kemunculan Substring dalam String Menggunakan count()

Metode

Number of substring occurrences: 2
Number of substring occurrences: 1
4 dari kelas string benar-benar melakukan hal ini. Ini mengembalikan berapa kali nilai tertentu (substring) muncul dalam string. Ini juga memiliki dua parameter opsional -
Number of substring occurrences: 2
Number of substring occurrences: 1
_5 dan
Number of substring occurrences: 2
Number of substring occurrences: 1
6, yang menunjukkan awal dan akhir ruang pencarian

string.count(value, start, end)

Catatan.

Number of substring occurrences: 2
Number of substring occurrences: 1
5 default adalah
Number of substring occurrences: 2
Number of substring occurrences: 1
8, dan default
Number of substring occurrences: 2
Number of substring occurrences: 1
6 adalah panjang string

Mari kita lihat penggunaan metode tersebut, dengan kalimat yang representatif

Ini menghasilkan

Number of substring occurrences: 2
Number of substring occurrences: 1

Ini adalah metode yang sangat sederhana dan mudah yang bekerja dengan baik dalam banyak kasus. Ini efisien, dan dapat ditingkatkan dengan baik ke ukuran masukan yang besar. Misalnya, kita dapat memuat sebagian besar teks dan mencari kata umum atau stopword yang pasti ada

Anda juga bisa mendapatkan ruang pencarian yang besar untuk mengetahui efisiensinya. Mari unduh 'Romeo and Juliet' oleh William Shakespeare, dari Proyek Gutenberg, dan ambil berapa kali

import time
import requests

txt = requests.get('https://www.gutenberg.org/cache/epub/1513/pg1513.txt').text
print(f"Downloaded {len(txt)} bytes of text...")

start_time = time.time()
count = txt.count('Romeo')
end_time = time.time()

print(f"Time to find all occurences of 'Romeo': {end_time - start_time}s with {count} results")
0 disebutkan

import time
import requests

txt = requests.get('https://www.gutenberg.org/cache/epub/1513/pg1513.txt').text
print(f"Downloaded {len(txt)} bytes of text...")

start_time = time.time()
count = txt.count('Romeo')
end_time = time.time()

print(f"Time to find all occurences of 'Romeo': {end_time - start_time}s with {count} results")

Ini menghasilkan

Downloaded 167333 bytes of text...
Time to find all occurences of 'Romeo': 0.0s with 153 results

Atau, bahkan jika kita menemukan kata yang jauh lebih umum, seperti

import time
import requests

txt = requests.get('https://www.gutenberg.org/cache/epub/1513/pg1513.txt').text
print(f"Downloaded {len(txt)} bytes of text...")

start_time = time.time()
count = txt.count('Romeo')
end_time = time.time()

print(f"Time to find all occurences of 'Romeo': {end_time - start_time}s with {count} results")
1

start_time = time.time()
count = txt.count('a')
end_time = time.time()

print(f"Time to find all occurences of 'a': {end_time - start_time}s with {count} results")

Hasilnya sama

Downloaded 167333 bytes of text...
Time to find all occurences of 'Romeo': 0.0s with 8308 results

Sebagian besar waktu eksekusi diambil dari waktu yang diperlukan untuk mengunduh teks

Catatan. Metode ini tidak mengembalikan posisi dalam string di mana substring muncul

Jika Anda memerlukan pengetahuan ini, baik untuk melakukan operasi transformasional tambahan pada kejadian selain menghitungnya - Anda akan ingin menggunakan Ekspresi Reguler untuk menemukan posisinya atau memeriksa setiap kasus dengan

import time
import requests

txt = requests.get('https://www.gutenberg.org/cache/epub/1513/pg1513.txt').text
print(f"Downloaded {len(txt)} bytes of text...")

start_time = time.time()
count = txt.count('Romeo')
end_time = time.time()

print(f"Time to find all occurences of 'Romeo': {end_time - start_time}s with {count} results")
2

Kami akan melihat dua kasus ini di bagian berikut

Temukan Semua Kemunculan dan Posisi Substring dalam String dengan Python

Metode

import time
import requests

txt = requests.get('https://www.gutenberg.org/cache/epub/1513/pg1513.txt').text
print(f"Downloaded {len(txt)} bytes of text...")

start_time = time.time()
count = txt.count('Romeo')
end_time = time.time()

print(f"Time to find all occurences of 'Romeo': {end_time - start_time}s with {count} results")
_3 mengembalikan
import time
import requests

txt = requests.get('https://www.gutenberg.org/cache/epub/1513/pg1513.txt').text
print(f"Downloaded {len(txt)} bytes of text...")

start_time = time.time()
count = txt.count('Romeo')
end_time = time.time()

print(f"Time to find all occurences of 'Romeo': {end_time - start_time}s with {count} results")
4 jika string dimulai dengan
import time
import requests

txt = requests.get('https://www.gutenberg.org/cache/epub/1513/pg1513.txt').text
print(f"Downloaded {len(txt)} bytes of text...")

start_time = time.time()
count = txt.count('Romeo')
end_time = time.time()

print(f"Time to find all occurences of 'Romeo': {end_time - start_time}s with {count} results")
5 (substring) yang ditentukan dan
import time
import requests

txt = requests.get('https://www.gutenberg.org/cache/epub/1513/pg1513.txt').text
print(f"Downloaded {len(txt)} bytes of text...")

start_time = time.time()
count = txt.count('Romeo')
end_time = time.time()

print(f"Time to find all occurences of 'Romeo': {end_time - start_time}s with {count} results")
6 jika tidak. Mirip dengan metode
Number of substring occurrences: 2
Number of substring occurrences: 1
_4, metode ini juga memiliki parameter opsional awal dan akhir yang menentukan posisi awal dan akhir ruang pencarian

Lihat panduan praktis dan praktis kami untuk mempelajari Git, dengan praktik terbaik, standar yang diterima industri, dan menyertakan lembar contekan. Hentikan perintah Googling Git dan benar-benar pelajari itu

string.startswith(value, start, end)

Nilai default

Number of substring occurrences: 2
Number of substring occurrences: 1
5 adalah
Number of substring occurrences: 2
Number of substring occurrences: 1
8 dan nilai default
Number of substring occurrences: 2
Number of substring occurrences: 1
6 adalah panjang string

Menggunakan metode ini sedikit lebih kompleks, karena mengharuskan kita untuk menggunakan pemahaman daftar bersama dengan metode itu sendiri, atau loop

Downloaded 167333 bytes of text...
Time to find all occurences of 'Romeo': 0.0s with 153 results
1 yang lebih tradisional. Metode
import time
import requests

txt = requests.get('https://www.gutenberg.org/cache/epub/1513/pg1513.txt').text
print(f"Downloaded {len(txt)} bytes of text...")

start_time = time.time()
count = txt.count('Romeo')
end_time = time.time()

print(f"Time to find all occurences of 'Romeo': {end_time - start_time}s with {count} results")
_3 mengembalikan indeks awal substring. Setelah itu, kami menggunakan pemahaman daftar untuk beralih ke seluruh ruang pencarian

Ini menjaring kita jumlah kejadian, seperti terakhir kali, tetapi juga posisi awal dari string itu sendiri. Karena kita mengetahui string yang dimaksud, dan dengan demikian, panjangnya - kita dapat dengan mudah menyimpulkan ruang yang ditempatinya dalam string pencarian

Original string is: John has 1 apple, Sarah has 2 apples, Mike has 5 apples.
Substring is: apples
Number of substring occurrences is: 2
Starting indices of substrings are: [30, 49]

Temukan Semua Kemunculan Substring dalam String dengan Python Menggunakan re. pencari()

Fungsi

Downloaded 167333 bytes of text...
Time to find all occurences of 'Romeo': 0.0s with 153 results
_3 adalah bagian dari pustaka RegEx Python -
Downloaded 167333 bytes of text...
Time to find all occurences of 'Romeo': 0.0s with 153 results
4. Ini paling sering digunakan untuk menemukan kemunculan pola tertentu dalam string yang diberikan

Untuk mengaktifkan penggunaan metode ini, bersama dengan banyak metode lain yang menangani ekspresi RegEx, pertama-tama kita perlu mengimpor pustaka regex

re.finditer(pattern, string, flags=0)

Jika Anda ingin mempelajari lebih lanjut tentang Ekspresi Reguler, baca Panduan Ekspresi Reguler kami dengan Python

Fungsi

Downloaded 167333 bytes of text...
Time to find all occurences of 'Romeo': 0.0s with 153 results
_5 mengembalikan iterator yang menghasilkan objek yang cocok di atas semua kecocokan yang tidak tumpang tindih untuk pola RegEx dalam sebuah string. Pemindaian dilakukan dari kiri ke kanan, dan kecocokan dikembalikan sesuai urutan ditemukannya. Pertandingan kosong juga disertakan

Bendera dapat digunakan untuk mengaktifkan berbagai fitur unik dan variasi sintaksis (misalnya,

Downloaded 167333 bytes of text...
Time to find all occurences of 'Romeo': 0.0s with 153 results
6 atau
Downloaded 167333 bytes of text...
Time to find all occurences of 'Romeo': 0.0s with 153 results
7 bendera memungkinkan pencocokan tidak peka huruf besar/kecil,
Downloaded 167333 bytes of text...
Time to find all occurences of 'Romeo': 0.0s with 153 results
8 atau
Downloaded 167333 bytes of text...
Time to find all occurences of 'Romeo': 0.0s with 153 results
9 bendera memungkinkan
start_time = time.time()
count = txt.count('a')
end_time = time.time()

print(f"Time to find all occurences of 'a': {end_time - start_time}s with {count} results")
0 hanya cocok, bukan pencocokan penuh
start_time = time.time()
count = txt.count('a')
end_time = time.time()

print(f"Time to find all occurences of 'a': {end_time - start_time}s with {count} results")
1 biasa)

Mari ganti pemahaman daftar dari sebelumnya dengan Regular Expression

Ini menghasilkan

Original string is: John has 1 apple, Sarah has 2 apples, Mike has 5 apples.
Substring is: apples
Number of substring occurrences is: 2
The start and end indices of the substrings are: [(30, 36), (49, 55)]

Sekarang, kita tidak perlu menambahkan panjang string secara manual ke indeks awal

Kinerja Tolok Ukur

Perlu diperhatikan bahwa performa akan bervariasi berdasarkan metode yang Anda pilih. Meskipun dalam semua kasus, kode akan berakhir dengan cukup cepat - masih layak untuk mempertimbangkan kinerja di ruang pencarian yang sangat besar

Mari gunakan tiga metode ini untuk menemukan semua contoh karakter

import time
import requests

txt = requests.get('https://www.gutenberg.org/cache/epub/1513/pg1513.txt').text
print(f"Downloaded {len(txt)} bytes of text...")

start_time = time.time()
count = txt.count('Romeo')
end_time = time.time()

print(f"Time to find all occurences of 'Romeo': {end_time - start_time}s with {count} results")
1 di 'Romeo and Juliet'

Number of substring occurrences: 2
Number of substring occurrences: 1
0

Ini menghasilkan

Number of substring occurrences: 2
Number of substring occurrences: 1
_1

Metode

Number of substring occurrences: 2
Number of substring occurrences: 1
4 pasti yang paling efisien, tetapi tidak memberi tahu kami di mana string berada. Untuk pengetahuan tambahan - Ekspresi Reguler masih sangat cepat untuk tugas ini, dan lebih dari 10 kali lebih efisien daripada loop pemahaman daftar manual kami

Kesimpulan

Ada beberapa cara berbeda untuk mengatasi masalah ini, beberapa digunakan lebih sering daripada yang lain, tergantung pada data yang ingin Anda ekstrak dalam proses tersebut

Dalam tolok ukur, metode

Number of substring occurrences: 2
Number of substring occurrences: 1
_4 mengungguli dua lainnya, tetapi tidak memberi kami informasi tentang di mana substring berada. Di sisi lain, Ekspresi Reguler, meskipun lebih lambat, memberi kami informasi ini

Perlu dicatat bahwa ketiga pendekatan ini sangat cepat dan dapat menguraikan seluruh karya sastra untuk kata umum dalam sepersekian detik.

Berapa kali substring muncul dalam string Python?

Python String count() function adalah fungsi bawaan dalam bahasa pemrograman python yang mengembalikan jumlah kemunculan substring dalam string yang diberikan. Parameter. Fungsi count() memiliki satu parameter wajib dan dua parameter opsional.

Bagaimana Anda menemukan semua indeks substring dalam sebuah string?

5 Cara Menemukan Indeks Substring dalam String dengan Python .
str. Temukan()
str. menemukan()
str. indeks()
str. indeks()
ulang. Cari()

Bagaimana Anda memeriksa substring berulang dengan Python?

Python memiliki fungsi bawaan untuk menghitung substring berulang dalam string tertentu yang disebut count() . Seperti namanya, itu menghitung kemunculan substring dalam string yang diberikan.

Bagaimana Anda menemukan semua kemunculan kata dalam sebuah string?

Pendekatan. .
Pertama, kami membagi string dengan spasi di a
Kemudian, ambil variabel hitung = 0 dan di setiap kondisi sebenarnya, kami menambah hitungan dengan 1
Sekarang jalankan loop pada 0 hingga panjang string dan periksa apakah string kita sama dengan kata tersebut