Hướng dẫn how do you check for overlapping strings in python? - làm thế nào để bạn kiểm tra các chuỗi chồng chéo trong python?

Thuật toán Knuth-Morris-Pratt là một phương pháp tốt để tìm một chuỗi bên trong một chuỗi khác (vì tôi đã thấy DNA, tôi đoán bạn muốn điều này để mở rộng lên hàng tỷ?).

# Knuth-Morris-Pratt string matching
# David Eppstein, UC Irvine, 1 Mar 2002

from __future__ import generators

def KnuthMorrisPratt(text, pattern):

    '''Yields all starting positions of copies of the pattern in the text.
Calling conventions are similar to string.find, but its arguments can be
lists or iterators, not just strings, it returns all matches, not just
the first one, and it does not need the whole text in memory at once.
Whenever it yields, it will have read the text exactly up to and including
the match that caused the yield.'''

    # allow indexing into pattern and protect against change during yield
    pattern = list(pattern)

    # build table of shift amounts
    shifts = [1] * (len(pattern) + 1)
    shift = 1
    for pos in range(len(pattern)):
        while shift <= pos and pattern[pos] != pattern[pos-shift]:
            shift += shifts[pos-shift]
        shifts[pos+1] = shift

    # do the actual search
    startPos = 0
    matchLen = 0
    for c in text:
        while matchLen == len(pattern) or \
              matchLen >= 0 and pattern[matchLen] != c:
            startPos += shifts[matchLen]
            matchLen -= shifts[matchLen]
        matchLen += 1
        if matchLen == len(pattern):
            yield startPos

Liên kết nơi tôi có mã KMP Python (và tích hợp, sẽ nhanh hơn cho các vấn đề nhỏ vì hằng số thời gian chạy).

Để có hiệu suất cạnh chảy máu, hãy sử dụng bảng tiền tố và băm các cửa sổ của chuỗi của bạn dưới dạng số nguyên cơ sở 4 (trong sinh học, bạn gọi chúng là K-MERS hoặc Oligos). ; )

Chúc may mắn!

Chỉnh sửa: Ngoài ra còn có một thủ thuật hay, bạn sắp xếp danh sách chứa mọi tiền tố (tổng n) trong chuỗi đầu tiên và mỗi tiền tố (tổng n) trong chuỗi thứ hai. Nếu họ chia sẻ phần tiếp theo chung lớn nhất, thì chúng phải liền kề trong danh sách được sắp xếp, vì vậy hãy tìm phần tử từ chuỗi khác gần nhất trong danh sách được sắp xếp, và sau đó lấy tiền tố dài nhất hoàn toàn. :) There's also a nice trick where you sort a list containing every prefix (n total) in the first string and every prefix (n total) in the second string. If they share the largest common subsequence, then they must be adjacent in the sorted list, so find the element from the other string that is closest in the sorted list, and then take the longest prefix that matches completely. : )

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

Chức năng Python String Count () là một hàm sẵn có trong ngôn ngữ lập trình Python trả về số lần xuất hiện của một chuỗi con trong chuỗi đã cho. Tham số: Hàm đếm () có một bắt buộc và hai tham số tùy chọn.

Làm thế nào để tôi tìm thấy trong Python?

  • Chuỗi python tìm ().
  • tìm () cú pháp. Cú pháp của phương thức find () là: str.find (sub [, start [, end]]).
  • Làm thế nào để bạn đếm số lượng chuỗi con trong một chuỗi trong Python?

    Chức năng Python String Count () là một hàm sẵn có trong ngôn ngữ lập trình Python trả về số lần xuất hiện của một chuỗi con trong chuỗi đã cho. Tham số: Hàm đếm () có một bắt buộc và hai tham số tùy chọn.

    Làm thế nào để tôi tìm thấy trong Python?

    Chuỗi python tìm ().

    Examples:

    Đầu vào: Chuỗi: Geeksforgeeksforgeeks Mẫu: Geeksforgeeks và NBSP;String: “geeksforgeeksforgeeks” ; Pattern: “geeksforgeeks” 

    Đầu ra: [0, 8] & nbsp; [0, 8] 

    Giải thích: Mẫu đang chồng chéo chuỗi từ chỉ mục 0 đến chỉ mục thứ 12 và một lần nữa chồng chéo nó từ chỉ số thứ 8 đến chỉ mục thứ 20. Do đó, đầu ra là vị trí bắt đầu của sự chồng chéo I.E INDEX 0 và INDEX 8. & NBSP; & NBSP; The pattern is overlapping the string from 0th index to 12th index and again overlapping it from 8th index to 20th index. Hence, the output is the starting positions of overlapping i.e index 0 and index 8.   

    Đầu vào: Chuỗi: Hồi Barfoobarfoobarfoobarfoobarfoo & nbsp; mẫu: Foobarfoo '& nbsp;String: “barfoobarfoobarfoobarfoobarfoo” ;  Pattern: “foobarfoo” 

    Đầu ra: [3, 9,15, 21] & nbsp; [3, 9,15, 21] 

    Giải thích: Mẫu chồng chéo chuỗi từ INDEX 3, 9, 15 và 21. The pattern is overlapping the string from index 3, 9 , 15 and 21.

    Phương thức này trả về số lượng của các chỉ số không chồng chéo từ một chuỗi có nhiều mẫu xảy ra chồng chéo. Dưới đây là một chương trình mô tả việc sử dụng phương thức findIter ().

    Python3

    import re

    def CntSubstr(pattern, string):

        a =

        

    [0]
    6
    [0]
    7

    [0]
    8=
    [0, 8]
    [3, 9, 15, 21]
    0

    [0, 8]
    [3, 9, 15, 21]
    1=
    [0, 8]
    [3, 9, 15, 21]
    3

    [0, 8]
    [3, 9, 15, 21]
    4
    [0, 8]
    [3, 9, 15, 21]
    5

    Output:

    [0]

    Do đó, để có được các chỉ số chồng chéo cũng như chúng ta cần làm là thoát ra khỏi các biểu thức thông thường trong mẫu. Định nghĩa trong hàm rõ ràng giúp chọn các ký tự theo cách một phần.

    Approach:

    1. Re.Finditer () giúp tìm các chỉ số nơi xảy ra đối tượng đối sánh. Khi nó trả về một đối tượng có thể lặp lại, phương thức start () giúp trả lại các chỉ số nếu không nó sẽ cho thấy rằng một đối tượng khớp đã được tìm thấy tại một số vị trí.
    2. Phương pháp tiêu chuẩn trong khớp bằng mô -đun RE là tham lam, điều đó có nghĩa là số lượng ký tự tối đa được khớp. Do đó,? = {0} giúp số lượng trận đấu tối thiểu.
    3. Để phù hợp với nó để các ký tự một phần được khớp, re.escape () giúp thoát ra khỏi các ký tự đặc biệt đã được thêm vào trước đó như? = {0}.
    4. Kết quả là bằng cách thêm các sửa đổi SOM, phương thức findIter () trả về một danh sách các chỉ số chồng chéo.

    Dưới đây là việc thực hiện phương pháp trên:

    Python3

    import re

    def CntSubstr(pattern, string):

        a =

    import8import9re0re1re2

        

    [0]
    6
    [0]
    7

    [0]
    8=
    [0, 8]
    [3, 9, 15, 21]
    0

    [0, 8]
    [3, 9, 15, 21]
    1=
    [0, 8]
    [3, 9, 15, 21]
    3

    Do đó, để có được các chỉ số chồng chéo cũng như chúng ta cần làm là thoát ra khỏi các biểu thức thông thường trong mẫu. Định nghĩa trong hàm rõ ràng giúp chọn các ký tự theo cách một phần.

    Re.Finditer () giúp tìm các chỉ số nơi xảy ra đối tượng đối sánh. Khi nó trả về một đối tượng có thể lặp lại, phương thức start () giúp trả lại các chỉ số nếu không nó sẽ cho thấy rằng một đối tượng khớp đã được tìm thấy tại một số vị trí.

    [0, 8]
    [3, 9, 15, 21]
    4def9

    [0, 8]
    [3, 9, 15, 21]
    4CntSubstr(pattern, string):1

    Output:

    [0, 8]
    [3, 9, 15, 21]

    Phương pháp tiêu chuẩn trong khớp bằng mô -đun RE là tham lam, điều đó có nghĩa là số lượng ký tự tối đa được khớp. Do đó,? = {0} giúp số lượng trận đấu tối thiểu.

    Để phù hợp với nó để các ký tự một phần được khớp, re.escape () giúp thoát ra khỏi các ký tự đặc biệt đã được thêm vào trước đó như? = {0}.O(n)

    Kết quả là bằng cách thêm các sửa đổi SOM, phương thức findIter () trả về một danh sách các chỉ số chồng chéo.O(n)


    Làm thế nào để Python xác định chuỗi chồng chéo?

    Các bước để tìm số lần xuất hiện chồng chéo đi qua chuỗi bằng cách sử dụng vòng lặp và phạm vi (LEN (chuỗi)). Tìm chỉ mục của lần xuất hiện đầu tiên của chuỗi con bằng chuỗi. Tìm (Subring, bắt đầu). Nếu chỉ mục không âm, hãy cập nhật bắt đầu với kết quả của chỉ mục thu được trong bước trên.Traverse through the string using for loop and range(len(string)) . Find the index of the first occurrence of the substring using String. find(substring, start) . If index is non-negative, update the start with the result of index obtained in above step.

    Làm thế nào để bạn tìm thấy khoảng thời gian chồng chéo trong Python?

    Ý tưởng cơ bản là 1) đầu tiên đưa input_start vào test_start (nếu cả hai đều không bằng nhau và input_start là min)không công bằng).

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

    Chức năng Python String Count () là một hàm sẵn có trong ngôn ngữ lập trình Python trả về số lần xuất hiện của một chuỗi con trong chuỗi đã cho.Tham số: Hàm đếm () có một bắt buộc và hai tham số tùy chọn. is an inbuilt function in python programming language that returns the number of occurrences of a substring in the given string. Parameters: The count() function has one compulsory and two optional parameters.

    Làm thế nào để tôi tìm thấy trong Python?

    Chuỗi python tìm ()..
    tìm () cú pháp.Cú pháp của phương thức find () là: str.find (sub [, start [, end]]).
    Tìm () tham số.Phương thức Find () mất tối đa ba tham số:.
    tìm () giá trị trả về.Phương thức Find () trả về một giá trị số nguyên:.
    Làm việc của phương thức find () ..
    Ví dụ 1: find () không có đối số bắt đầu và kết thúc ..