Hướng dẫn how do you count the number of substrings in a string in python? - làm thế nào để bạn đếm số lượng chuỗi con trong một chuỗi trong python?

Câu trả lời tốt nhất hiện tại liên quan đến Phương pháp count không thực sự được tính cho các lần xuất hiện chồng chéo và cũng không quan tâm đến các chuỗi phụ trống. Ví dụ:

>>> a = 'caatatab'
>>> b = 'ata'
>>> print(a.count(b)) #overlapping
1
>>>print(a.count('')) #empty string
9

Câu trả lời đầu tiên phải là 2 không phải 1, nếu chúng ta xem xét các nền tảng chồng chéo. Đối với câu trả lời thứ hai thì tốt hơn nếu một chuỗi phụ trống trả về 0 là asnwer.

Mã sau đây chăm sóc những điều này.

def num_of_patterns(astr,pattern):
    astr, pattern = astr.strip(), pattern.strip()
    if pattern == '': return 0

    ind, count, start_flag = 0,0,0
    while True:
        try:
            if start_flag == 0:
                ind = astr.index(pattern)
                start_flag = 1
            else:
                ind += 1 + astr[ind+1:].index(pattern)
            count += 1
        except:
            break
    return count

Bây giờ khi chúng ta chạy nó:

>>>num_of_patterns('caatatab', 'ata') #overlapping
2
>>>num_of_patterns('caatatab', '') #empty string
0
>>>num_of_patterns('abcdabcva','ab') #normal
2

Xem thảo luận

Cải thiện bài viết

Lưu bài viết

  • Đọc
  • Bàn luận
  • Xem thảo luận

    Cải thiện bài viết

    Lưu bài viết

    Đọc

    Bàn luận Method

    Python3

    Đưa ra một chuỗi và một chuỗi con, hãy viết một chương trình Python để tìm có bao nhiêu số lượng chất nền trong chuỗi (bao gồm cả các trường hợp chồng chéo). Hãy để thảo luận về một vài phương pháp dưới đây.

    Phương pháp số 1: Sử dụng phương thức re.findall ()

    import re

    def num_of_patterns(astr,pattern):
        astr, pattern = astr.strip(), pattern.strip()
        if pattern == '': return 0
    
        ind, count, start_flag = 0,0,0
        while True:
            try:
                if start_flag == 0:
                    ind = astr.index(pattern)
                    start_flag = 1
                else:
                    ind += 1 + astr[ind+1:].index(pattern)
                count += 1
            except:
                break
        return count
    
    0____11
    def num_of_patterns(astr,pattern):
        astr, pattern = astr.strip(), pattern.strip()
        if pattern == '': return 0
    
        ind, count, start_flag = 0,0,0
        while True:
            try:
                if start_flag == 0:
                    ind = astr.index(pattern)
                    start_flag = 1
                else:
                    ind += 1 + astr[ind+1:].index(pattern)
                count += 1
            except:
                break
        return count
    
    2

    >>>num_of_patterns('caatatab', 'ata') #overlapping
    2
    >>>num_of_patterns('caatatab', '') #empty string
    0
    >>>num_of_patterns('abcdabcva','ab') #normal
    2
    
    2
    >>>num_of_patterns('caatatab', 'ata') #overlapping
    2
    >>>num_of_patterns('caatatab', '') #empty string
    0
    >>>num_of_patterns('abcdabcva','ab') #normal
    2
    
    3

    def num_of_patterns(astr,pattern):
        astr, pattern = astr.strip(), pattern.strip()
        if pattern == '': return 0
    
        ind, count, start_flag = 0,0,0
        while True:
            try:
                if start_flag == 0:
                    ind = astr.index(pattern)
                    start_flag = 1
                else:
                    ind += 1 + astr[ind+1:].index(pattern)
                count += 1
            except:
                break
        return count
    
    3
    def num_of_patterns(astr,pattern):
        astr, pattern = astr.strip(), pattern.strip()
        if pattern == '': return 0
    
        ind, count, start_flag = 0,0,0
        while True:
            try:
                if start_flag == 0:
                    ind = astr.index(pattern)
                    start_flag = 1
                else:
                    ind += 1 + astr[ind+1:].index(pattern)
                count += 1
            except:
                break
        return count
    
    1
    def num_of_patterns(astr,pattern):
        astr, pattern = astr.strip(), pattern.strip()
        if pattern == '': return 0
    
        ind, count, start_flag = 0,0,0
        while True:
            try:
                if start_flag == 0:
                    ind = astr.index(pattern)
                    start_flag = 1
                else:
                    ind += 1 + astr[ind+1:].index(pattern)
                count += 1
            except:
                break
        return count
    
    5
    Method

    Python3

    Đưa ra một chuỗi và một chuỗi con, hãy viết một chương trình Python để tìm có bao nhiêu số lượng chất nền trong chuỗi (bao gồm cả các trường hợp chồng chéo). Hãy để thảo luận về một vài phương pháp dưới đây.

    Phương pháp số 1: Sử dụng phương thức re.findall ()

    import re

    def num_of_patterns(astr,pattern):
        astr, pattern = astr.strip(), pattern.strip()
        if pattern == '': return 0
    
        ind, count, start_flag = 0,0,0
        while True:
            try:
                if start_flag == 0:
                    ind = astr.index(pattern)
                    start_flag = 1
                else:
                    ind += 1 + astr[ind+1:].index(pattern)
                count += 1
            except:
                break
        return count
    
    0____11
    def num_of_patterns(astr,pattern):
        astr, pattern = astr.strip(), pattern.strip()
        if pattern == '': return 0
    
        ind, count, start_flag = 0,0,0
        while True:
            try:
                if start_flag == 0:
                    ind = astr.index(pattern)
                    start_flag = 1
                else:
                    ind += 1 + astr[ind+1:].index(pattern)
                count += 1
            except:
                break
        return count
    
    2

    >>>num_of_patterns('caatatab', 'ata') #overlapping
    2
    >>>num_of_patterns('caatatab', '') #empty string
    0
    >>>num_of_patterns('abcdabcva','ab') #normal
    2
    
    2
    >>>num_of_patterns('caatatab', 'ata') #overlapping
    2
    >>>num_of_patterns('caatatab', '') #empty string
    0
    >>>num_of_patterns('abcdabcva','ab') #normal
    2
    
    3

    def num_of_patterns(astr,pattern):
        astr, pattern = astr.strip(), pattern.strip()
        if pattern == '': return 0
    
        ind, count, start_flag = 0,0,0
        while True:
            try:
                if start_flag == 0:
                    ind = astr.index(pattern)
                    start_flag = 1
                else:
                    ind += 1 + astr[ind+1:].index(pattern)
                count += 1
            except:
                break
        return count
    
    3
    def num_of_patterns(astr,pattern):
        astr, pattern = astr.strip(), pattern.strip()
        if pattern == '': return 0
    
        ind, count, start_flag = 0,0,0
        while True:
            try:
                if start_flag == 0:
                    ind = astr.index(pattern)
                    start_flag = 1
                else:
                    ind += 1 + astr[ind+1:].index(pattern)
                count += 1
            except:
                break
        return count
    
    1
    def num_of_patterns(astr,pattern):
        astr, pattern = astr.strip(), pattern.strip()
        if pattern == '': return 0
    
        ind, count, start_flag = 0,0,0
        while True:
            try:
                if start_flag == 0:
                    ind = astr.index(pattern)
                    start_flag = 1
                else:
                    ind += 1 + astr[ind+1:].index(pattern)
                count += 1
            except:
                break
        return count
    
    5Method #3: Using startswith() 

    Python3

    Phương pháp số 1: Sử dụng phương thức re.findall ()

    import re

    def num_of_patterns(astr,pattern):
        astr, pattern = astr.strip(), pattern.strip()
        if pattern == '': return 0
    
        ind, count, start_flag = 0,0,0
        while True:
            try:
                if start_flag == 0:
                    ind = astr.index(pattern)
                    start_flag = 1
                else:
                    ind += 1 + astr[ind+1:].index(pattern)
                count += 1
            except:
                break
        return count
    
    0____11
    def num_of_patterns(astr,pattern):
        astr, pattern = astr.strip(), pattern.strip()
        if pattern == '': return 0
    
        ind, count, start_flag = 0,0,0
        while True:
            try:
                if start_flag == 0:
                    ind = astr.index(pattern)
                    start_flag = 1
                else:
                    ind += 1 + astr[ind+1:].index(pattern)
                count += 1
            except:
                break
        return count
    
    2

    def num_of_patterns(astr,pattern):
        astr, pattern = astr.strip(), pattern.strip()
        if pattern == '': return 0
    
        ind, count, start_flag = 0,0,0
        while True:
            try:
                if start_flag == 0:
                    ind = astr.index(pattern)
                    start_flag = 1
                else:
                    ind += 1 + astr[ind+1:].index(pattern)
                count += 1
            except:
                break
        return count
    
    3
    def num_of_patterns(astr,pattern):
        astr, pattern = astr.strip(), pattern.strip()
        if pattern == '': return 0
    
        ind, count, start_flag = 0,0,0
        while True:
            try:
                if start_flag == 0:
                    ind = astr.index(pattern)
                    start_flag = 1
                else:
                    ind += 1 + astr[ind+1:].index(pattern)
                count += 1
            except:
                break
        return count
    
    1
    def num_of_patterns(astr,pattern):
        astr, pattern = astr.strip(), pattern.strip()
        if pattern == '': return 0
    
        ind, count, start_flag = 0,0,0
        while True:
            try:
                if start_flag == 0:
                    ind = astr.index(pattern)
                    start_flag = 1
                else:
                    ind += 1 + astr[ind+1:].index(pattern)
                count += 1
            except:
                break
        return count
    
    5

    def num_of_patterns(astr,pattern):
        astr, pattern = astr.strip(), pattern.strip()
        if pattern == '': return 0
    
        ind, count, start_flag = 0,0,0
        while True:
            try:
                if start_flag == 0:
                    ind = astr.index(pattern)
                    start_flag = 1
                else:
                    ind += 1 + astr[ind+1:].index(pattern)
                count += 1
            except:
                break
        return count
    
    6
    def num_of_patterns(astr,pattern):
        astr, pattern = astr.strip(), pattern.strip()
        if pattern == '': return 0
    
        ind, count, start_flag = 0,0,0
        while True:
            try:
                if start_flag == 0:
                    ind = astr.index(pattern)
                    start_flag = 1
                else:
                    ind += 1 + astr[ind+1:].index(pattern)
                count += 1
            except:
                break
        return count
    
    1
    def num_of_patterns(astr,pattern):
        astr, pattern = astr.strip(), pattern.strip()
        if pattern == '': return 0
    
        ind, count, start_flag = 0,0,0
        while True:
            try:
                if start_flag == 0:
                    ind = astr.index(pattern)
                    start_flag = 1
                else:
                    ind += 1 + astr[ind+1:].index(pattern)
                count += 1
            except:
                break
        return count
    
    8
    def num_of_patterns(astr,pattern):
        astr, pattern = astr.strip(), pattern.strip()
        if pattern == '': return 0
    
        ind, count, start_flag = 0,0,0
        while True:
            try:
                if start_flag == 0:
                    ind = astr.index(pattern)
                    start_flag = 1
                else:
                    ind += 1 + astr[ind+1:].index(pattern)
                count += 1
            except:
                break
        return count
    
    9
    >>>num_of_patterns('caatatab', 'ata') #overlapping
    2
    >>>num_of_patterns('caatatab', '') #empty string
    0
    >>>num_of_patterns('abcdabcva','ab') #normal
    2
    
    0
    >>>num_of_patterns('caatatab', 'ata') #overlapping
    2
    >>>num_of_patterns('caatatab', '') #empty string
    0
    >>>num_of_patterns('abcdabcva','ab') #normal
    2
    
    1

    Output:

    Number of substrings 4

    Phương pháp số 2: Sử dụng phương thức re.finditer ()

    Python3

    def num_of_patterns(astr,pattern):
        astr, pattern = astr.strip(), pattern.strip()
        if pattern == '': return 0
    
        ind, count, start_flag = 0,0,0
        while True:
            try:
                if start_flag == 0:
                    ind = astr.index(pattern)
                    start_flag = 1
                else:
                    ind += 1 + astr[ind+1:].index(pattern)
                count += 1
            except:
                break
        return count
    
    0____11
    def num_of_patterns(astr,pattern):
        astr, pattern = astr.strip(), pattern.strip()
        if pattern == '': return 0
    
        ind, count, start_flag = 0,0,0
        while True:
            try:
                if start_flag == 0:
                    ind = astr.index(pattern)
                    start_flag = 1
                else:
                    ind += 1 + astr[ind+1:].index(pattern)
                count += 1
            except:
                break
        return count
    
    2

    def num_of_patterns(astr,pattern):
        astr, pattern = astr.strip(), pattern.strip()
        if pattern == '': return 0
    
        ind, count, start_flag = 0,0,0
        while True:
            try:
                if start_flag == 0:
                    ind = astr.index(pattern)
                    start_flag = 1
                else:
                    ind += 1 + astr[ind+1:].index(pattern)
                count += 1
            except:
                break
        return count
    
    3
    def num_of_patterns(astr,pattern):
        astr, pattern = astr.strip(), pattern.strip()
        if pattern == '': return 0
    
        ind, count, start_flag = 0,0,0
        while True:
            try:
                if start_flag == 0:
                    ind = astr.index(pattern)
                    start_flag = 1
                else:
                    ind += 1 + astr[ind+1:].index(pattern)
                count += 1
            except:
                break
        return count
    
    1
    def num_of_patterns(astr,pattern):
        astr, pattern = astr.strip(), pattern.strip()
        if pattern == '': return 0
    
        ind, count, start_flag = 0,0,0
        while True:
            try:
                if start_flag == 0:
                    ind = astr.index(pattern)
                    start_flag = 1
                else:
                    ind += 1 + astr[ind+1:].index(pattern)
                count += 1
            except:
                break
        return count
    
    5

    14 15

    16177____11 19

    16import1

    def num_of_patterns(astr,pattern):
        astr, pattern = astr.strip(), pattern.strip()
        if pattern == '': return 0
    
        ind, count, start_flag = 0,0,0
        while True:
            try:
                if start_flag == 0:
                    ind = astr.index(pattern)
                    start_flag = 1
                else:
                    ind += 1 + astr[ind+1:].index(pattern)
                count += 1
            except:
                break
        return count
    
    1 19

    16import5 import6

    def num_of_patterns(astr,pattern):
        astr, pattern = astr.strip(), pattern.strip()
        if pattern == '': return 0
    
        ind, count, start_flag = 0,0,0
        while True:
            try:
                if start_flag == 0:
                    ind = astr.index(pattern)
                    start_flag = 1
                else:
                    ind += 1 + astr[ind+1:].index(pattern)
                count += 1
            except:
                break
        return count
    
    8import8

    import9re0

    def num_of_patterns(astr,pattern):
        astr, pattern = astr.strip(), pattern.strip()
        if pattern == '': return 0
    
        ind, count, start_flag = 0,0,0
        while True:
            try:
                if start_flag == 0:
                    ind = astr.index(pattern)
                    start_flag = 1
                else:
                    ind += 1 + astr[ind+1:].index(pattern)
                count += 1
            except:
                break
        return count
    
    1 re2

    def num_of_patterns(astr,pattern):
        astr, pattern = astr.strip(), pattern.strip()
        if pattern == '': return 0
    
        ind, count, start_flag = 0,0,0
        while True:
            try:
                if start_flag == 0:
                    ind = astr.index(pattern)
                    start_flag = 1
                else:
                    ind += 1 + astr[ind+1:].index(pattern)
                count += 1
            except:
                break
        return count
    
    00import1
    def num_of_patterns(astr,pattern):
        astr, pattern = astr.strip(), pattern.strip()
        if pattern == '': return 0
    
        ind, count, start_flag = 0,0,0
        while True:
            try:
                if start_flag == 0:
                    ind = astr.index(pattern)
                    start_flag = 1
                else:
                    ind += 1 + astr[ind+1:].index(pattern)
                count += 1
            except:
                break
        return count
    
    1 re0
    def num_of_patterns(astr,pattern):
        astr, pattern = astr.strip(), pattern.strip()
        if pattern == '': return 0
    
        ind, count, start_flag = 0,0,0
        while True:
            try:
                if start_flag == 0:
                    ind = astr.index(pattern)
                    start_flag = 1
                else:
                    ind += 1 + astr[ind+1:].index(pattern)
                count += 1
            except:
                break
        return count
    
    04 1

    def num_of_patterns(astr,pattern):
        astr, pattern = astr.strip(), pattern.strip()
        if pattern == '': return 0
    
        ind, count, start_flag = 0,0,0
        while True:
            try:
                if start_flag == 0:
                    ind = astr.index(pattern)
                    start_flag = 1
                else:
                    ind += 1 + astr[ind+1:].index(pattern)
                count += 1
            except:
                break
        return count
    
    00177____1044____11 1

    import9

    def num_of_patterns(astr,pattern):
        astr, pattern = astr.strip(), pattern.strip()
        if pattern == '': return 0
    
        ind, count, start_flag = 0,0,0
        while True:
            try:
                if start_flag == 0:
                    ind = astr.index(pattern)
                    start_flag = 1
                else:
                    ind += 1 + astr[ind+1:].index(pattern)
                count += 1
            except:
                break
        return count
    
    12re9

    def num_of_patterns(astr,pattern):
        astr, pattern = astr.strip(), pattern.strip()
        if pattern == '': return 0
    
        ind, count, start_flag = 0,0,0
        while True:
            try:
                if start_flag == 0:
                    ind = astr.index(pattern)
                    start_flag = 1
                else:
                    ind += 1 + astr[ind+1:].index(pattern)
                count += 1
            except:
                break
        return count
    
    00
    def num_of_patterns(astr,pattern):
        astr, pattern = astr.strip(), pattern.strip()
        if pattern == '': return 0
    
        ind, count, start_flag = 0,0,0
        while True:
            try:
                if start_flag == 0:
                    ind = astr.index(pattern)
                    start_flag = 1
                else:
                    ind += 1 + astr[ind+1:].index(pattern)
                count += 1
            except:
                break
        return count
    
    15

    16

    def num_of_patterns(astr,pattern):
        astr, pattern = astr.strip(), pattern.strip()
        if pattern == '': return 0
    
        ind, count, start_flag = 0,0,0
        while True:
            try:
                if start_flag == 0:
                    ind = astr.index(pattern)
                    start_flag = 1
                else:
                    ind += 1 + astr[ind+1:].index(pattern)
                count += 1
            except:
                break
        return count
    
    17 count

    >>>num_of_patterns('caatatab', 'ata') #overlapping
    2
    >>>num_of_patterns('caatatab', '') #empty string
    0
    >>>num_of_patterns('abcdabcva','ab') #normal
    2
    
    2
    Number of substrings 4
    5
    def num_of_patterns(astr,pattern):
        astr, pattern = astr.strip(), pattern.strip()
        if pattern == '': return 0
    
        ind, count, start_flag = 0,0,0
        while True:
            try:
                if start_flag == 0:
                    ind = astr.index(pattern)
                    start_flag = 1
                else:
                    ind += 1 + astr[ind+1:].index(pattern)
                count += 1
            except:
                break
        return count
    
    21
    def num_of_patterns(astr,pattern):
        astr, pattern = astr.strip(), pattern.strip()
        if pattern == '': return 0
    
        ind, count, start_flag = 0,0,0
        while True:
            try:
                if start_flag == 0:
                    ind = astr.index(pattern)
                    start_flag = 1
                else:
                    ind += 1 + astr[ind+1:].index(pattern)
                count += 1
            except:
                break
        return count
    
    22

    Đầu ra

    Number of substrings 4


    Làm thế nào để bạn đếm các chuỗi con trong một chuỗi?

    Số lượng chuỗi con có độ dài một là N (chúng ta có thể chọn bất kỳ ký tự N nào).
    Số lượng chuỗi con có độ dài hai là N-1 (chúng ta có thể chọn bất kỳ cặp N-1 nào được hình thành bởi liền kề).
    Số lượng chất nền có chiều dài ba là N-2.....
    Nói chung, số lượng chuỗi con có độ dài k là n-k+1 trong đó 1

    Có bao nhiêu chất nền trong một chuỗi độ dài n?

    Cách tiếp cận: Số lượng của các chuỗi phụ có độ dài N sẽ luôn luôn là LEN-N + 1 trong đó LEN là chiều dài của chuỗi đã cho.len – n + 1 where len is the length of the given string.

    Làm cách nào để đếm số lần một chuỗi xuất hiện trong Python?

    Phương thức Python String Count () Phương thức Đếm () trả về số lần một giá trị được chỉ định xuất hiện trong chuỗi.count() Method The count() method returns the number of times a specified value appears in the string.

    Làm thế nào để bạn đếm số lượng ký tự trong một chuỗi trong Python?

    Trong Python, bạn có thể có độ dài của chuỗi str (= số lượng ký tự) với hàm tích hợp len ().with the built-in function len() .