Hướng dẫn string overlap python - chuỗi chồng chéo python

65

Nội dung chính

  • Xem xét biểu thức thường xuyên
  • Tạo tất cả các chuỗi con
  • Cách tìm một mẫu trong một chuỗi khác với sự chồng chéo
  • Làm thế nào để bạn kiểm tra các chuỗi chồng chéo trong Python?
  • Sự chồng chéo trong Python là gì?
  • Làm thế nào để bạn chồng chéo hai chuỗi trong Python?
  • Bao nhiêu lần một chuỗi chứa một chuỗi con trong Python?

Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.Learn more.
Learn more.

Cách tốt nhất để đếm số lần xuất hiện của một chuỗi nhất định, bao gồm cả sự chồng chéo trong Python? Đây là một cách:

def function(string, str_to_search_for):
      count = 0
      for x in xrange(len(string) - len(str_to_search_for) + 1):
           if string[x:x+len(str_to_search_for)] == str_to_search_for:
                count += 1
      return count


function('1011101111','11')

Phương pháp này trả về 5.

Có cách nào tốt hơn trong Python không?

Hướng dẫn string overlap python - chuỗi chồng chéo python

charlesreid1

4.1013 Huy hiệu vàng29 Huy hiệu bạc 50 Huy hiệu Đồng3 gold badges29 silver badges50 bronze badges3 gold badges29 silver badges50 bronze badges

Đã hỏi ngày 3 tháng 6 năm 2010 lúc 23:29Jun 3, 2010 at 23:29Jun 3, 2010 at 23:29

0

Chà, điều này có thể nhanh hơn vì nó so sánh trong C:

def occurrences(string, sub):
    count = start = 0
    while True:
        start = string.find(sub, start) + 1
        if start > 0:
            count+=1
        else:
            return count

Đã trả lời ngày 3 tháng 6 năm 2010 lúc 23:35Jun 3, 2010 at 23:35Jun 3, 2010 at 23:35

Jochen Ritzeljochen RitzelJochen RitzelJochen Ritzel

102K29 Huy hiệu vàng196 Huy hiệu bạc191 Huy hiệu Đồng29 gold badges196 silver badges191 bronze badges29 gold badges196 silver badges191 bronze badges

0

>>> import re
>>> text = '1011101111'
>>> len(re.findall('(?=11)', text))
5

Nếu bạn không muốn tải toàn bộ danh sách các trận đấu vào bộ nhớ, điều này sẽ không bao giờ là vấn đề! Bạn có thể làm điều này nếu bạn thực sự muốn:

>>> sum(1 for _ in re.finditer('(?=11)', text))
5

Là một hàm (

>>> sum(1 for _ in re.finditer('(?=11)', text))
5
5 đảm bảo phần phụ không can thiệp vào regex):
>>> def occurrences(text, sub):
        return len(re.findall('(?={0})'.format(re.escape(sub)), text))

>>> occurrences(text, '11')
5

Đã trả lời ngày 29 tháng 7 năm 2012 lúc 2:04Jul 29, 2012 at 2:04Jul 29, 2012 at 2:04

Jamylakjamylakjamylakjamylak

124K29 Huy hiệu vàng227 Huy hiệu bạc227 Huy hiệu Đồng29 gold badges227 silver badges227 bronze badges29 gold badges227 silver badges227 bronze badges

0

Bạn cũng có thể thử sử dụng mô -đun Python Regex mới, hỗ trợ các trận đấu chồng chéo.

import regex as re

def count_overlapping(text, search_for):
    return len(re.findall(search_for, text, overlapped=True))

count_overlapping('1011101111','11')  # 5

Đã trả lời ngày 25 tháng 8 năm 2016 lúc 22:50Aug 25, 2016 at 22:50Aug 25, 2016 at 22:50

David CDavid cDavid CDavid C

6.9194 Huy hiệu vàng48 Huy hiệu bạc65 Huy hiệu Đồng4 gold badges48 silver badges65 bronze badges4 gold badges48 silver badges65 bronze badges

>>> sum(1 for _ in re.finditer('(?=11)', text))
5
6 của Python đếm các chuỗi con không chồng chéo:
In [3]: "ababa".count("aba")
Out[3]: 1

Dưới đây là một vài cách để đếm các chuỗi chồng chéo, tôi chắc chắn còn nhiều cách nữa :)

Xem xét biểu thức thường xuyên

Làm thế nào để tìm các trận đấu chồng chéo với RegEXP?

In [10]: re.findall("a(?=ba)", "ababa")
Out[10]: ['a', 'a']

Tạo tất cả các chuỗi con

def occurrences(string, sub):
    count = start = 0
    while True:
        start = string.find(sub, start) + 1
        if start > 0:
            count+=1
        else:
            return count
0

Đã trả lời ngày 14 tháng 1 năm 2016 lúc 8:50Jan 14, 2016 at 8:50Jan 14, 2016 at 8:50

Dima Tisnekdima TisnekDima TisnekDima Tisnek

10,7K4 Huy hiệu vàng62 Huy hiệu bạc116 Huy hiệu đồng4 gold badges62 silver badges116 bronze badges4 gold badges62 silver badges116 bronze badges

1

def occurrences(string, sub):
    count = start = 0
    while True:
        start = string.find(sub, start) + 1
        if start > 0:
            count+=1
        else:
            return count
1

Đây có thể là cách dễ nhất.

Graham

2.5453 Huy hiệu vàng15 Huy hiệu bạc 30 Huy hiệu Đồng3 gold badges15 silver badges30 bronze badges3 gold badges15 silver badges30 bronze badges

Đã trả lời ngày 12 tháng 5 năm 2018 lúc 4:01May 12, 2018 at 4:01May 12, 2018 at 4:01

Arun Tomarun TomArun TomArun Tom

7316 Huy hiệu bạc8 Huy hiệu Đồng6 silver badges8 bronze badges6 silver badges8 bronze badges

Một cách khá pythonic sẽ là sử dụng danh sách hiểu ở đây, mặc dù nó có thể không hiệu quả nhất.

def occurrences(string, sub):
    count = start = 0
    while True:
        start = string.find(sub, start) + 1
        if start > 0:
            count+=1
        else:
            return count
0

Danh sách sẽ là

>>> sum(1 for _ in re.finditer('(?=11)', text))
5
7 vì nó kiểm tra tất cả các chỉ mục thông qua chuỗi và vì
>>> sum(1 for _ in re.finditer('(?=11)', text))
5
8,
>>> sum(1 for _ in re.finditer('(?=11)', text))
5
9 cung cấp cho chúng tôi tổng số trận đấu.

0x12

18.3K21 Huy hiệu vàng65 Huy hiệu bạc123 Huy hiệu Đồng21 gold badges65 silver badges123 bronze badges21 gold badges65 silver badges123 bronze badges

Đã trả lời ngày 26 tháng 2 năm 2019 lúc 23:08Feb 26, 2019 at 23:08Feb 26, 2019 at 23:08

ParkerdparkerdParkerDParkerD

1.06211 Huy hiệu bạc16 Huy hiệu đồng11 silver badges16 bronze badges11 silver badges16 bronze badges

def occurrences(string, sub):
    count = start = 0
    while True:
        start = string.find(sub, start) + 1
        if start > 0:
            count+=1
        else:
            return count
1

Đã trả lời ngày 7 tháng 3 năm 2015 lúc 13:49Mar 7, 2015 at 13:49Mar 7, 2015 at 13:49

Cách tìm một mẫu trong một chuỗi khác với sự chồng chéo

Hàm này (một giải pháp khác!) Nhận một mẫu và một văn bản. Trả về một danh sách với tất cả các chuỗi con nằm trong vị trí của họ.

def occurrences(string, sub):
    count = start = 0
    while True:
        start = string.find(sub, start) + 1
        if start > 0:
            count+=1
        else:
            return count
2

[('ana', 1), ('ana', 3)] [('Bana', 0), ('nana', 2), ('fana', 7), ('fana', 15)] [('Bana', 0), ('nana', 2), ('fana', 7), ('fana', 15)]
[('Bana', 0), ('nana', 2), ('fana', 7), ('fana', 15)]

Đã trả lời ngày 2 tháng 8 năm 2016 lúc 1:32Aug 2, 2016 at 1:32Aug 2, 2016 at 1:32

Câu trả lời của tôi, cho câu hỏi Bob trong khóa học:

def occurrences(string, sub):
    count = start = 0
    while True:
        start = string.find(sub, start) + 1
        if start > 0:
            count+=1
        else:
            return count
3

Đã trả lời ngày 22 tháng 1 năm 2015 lúc 22:30Jan 22, 2015 at 22:30Jan 22, 2015 at 22:30

Luke Dluke dLuke DLuke D

1.9513 huy hiệu vàng15 Huy hiệu bạc16 Huy hiệu đồng3 gold badges15 silver badges16 bronze badges3 gold badges15 silver badges16 bronze badges

0

Dưới đây là giải pháp EDX MIT "Tìm Bob"* của tôi (* Tìm số lượng "Bob" xảy ra trong một chuỗi có tên S), mà cơ bản tính các lần xuất hiện chồng chéo của một ứng cử viên đã cho:

def occurrences(string, sub):
    count = start = 0
    while True:
        start = string.find(sub, start) + 1
        if start > 0:
            count+=1
        else:
            return count
4

Đã trả lời ngày 2 tháng 9 năm 2015 lúc 13:22Sep 2, 2015 at 13:22Sep 2, 2015 at 13:22

Dasdachsdasdachsdasdachsdasdachs

65912 Huy hiệu bạc16 Huy hiệu đồng12 silver badges16 bronze badges12 silver badges16 bronze badges

Nếu chuỗi lớn, bạn muốn sử dụng Rabin-Karp, tóm lại:

  • một cửa sổ cuộn có kích thước chuỗi con, di chuyển qua một chuỗi
  • Một hàm băm với O (1) Chi phí để thêm và loại bỏ (tức là di chuyển bằng 1 char)
  • được thực hiện trong C hoặc dựa vào pypy

Đã trả lời ngày 10 tháng 4 năm 2017 lúc 12:51Apr 10, 2017 at 12:51Apr 10, 2017 at 12:51

Dima Tisnekdima TisnekDima TisnekDima Tisnek

10,7K4 Huy hiệu vàng62 Huy hiệu bạc116 Huy hiệu đồng4 gold badges62 silver badges116 bronze badges4 gold badges62 silver badges116 bronze badges

Đây có thể là cách dễ nhất.

def occurrences(string, sub):
    count = start = 0
    while True:
        start = string.find(sub, start) + 1
        if start > 0:
            count+=1
        else:
            return count
5

GrahamAug 4, 2017 at 6:55Aug 4, 2017 at 6:55

def occurrences(string, sub):
    count = start = 0
    while True:
        start = string.find(sub, start) + 1
        if start > 0:
            count+=1
        else:
            return count
6

2.5453 Huy hiệu vàng15 Huy hiệu bạc 30 Huy hiệu Đồng

Đã trả lời ngày 12 tháng 5 năm 2018 lúc 4:01Sep 19, 2017 at 23:12Sep 19, 2017 at 23:12

0

Arun Tomarun Tom

7316 Huy hiệu bạc8 Huy hiệu Đồng

Một cách khá pythonic sẽ là sử dụng danh sách hiểu ở đây, mặc dù nó có thể không hiệu quả nhất.Sep 19, 2021 at 14:00Sep 19, 2021 at 14:00

Danh sách sẽ là

>>> sum(1 for _ in re.finditer('(?=11)', text))
5
7 vì nó kiểm tra tất cả các chỉ mục thông qua chuỗi và vì
>>> sum(1 for _ in re.finditer('(?=11)', text))
5
8,
>>> sum(1 for _ in re.finditer('(?=11)', text))
5
9 cung cấp cho chúng tôi tổng số trận đấu.Stefan PochmannStefan Pochmann

18.3K21 Huy hiệu vàng65 Huy hiệu bạc123 Huy hiệu Đồng8 gold badges42 silver badges104 bronze badges8 gold badges42 silver badges104 bronze badges

def occurrences(string, sub):
    count = start = 0
    while True:
        start = string.find(sub, start) + 1
        if start > 0:
            count+=1
        else:
            return count
8

Đã trả lời ngày 26 tháng 2 năm 2019 lúc 23:08Jun 3, 2010 at 23:39Jun 3, 2010 at 23:39

Parkerdparkerd

def occurrences(string, sub):
    count = start = 0
    while True:
        start = string.find(sub, start) + 1
        if start > 0:
            count+=1
        else:
            return count
9

1.06211 Huy hiệu bạc16 Huy hiệu đồngAug 1, 2015 at 15:16Aug 1, 2015 at 15:16

Đã trả lời ngày 7 tháng 3 năm 2015 lúc 13:49

Cách tìm một mẫu trong một chuỗi khác với sự chồng chéo

Hàm này (một giải pháp khác!) Nhận một mẫu và một văn bản. Trả về một danh sách với tất cả các chuỗi con nằm trong vị trí của họ.Oct 3, 2015 at 17:52Oct 3, 2015 at 17:52

[('ana', 1), ('ana', 3)] [('Bana', 0), ('nana', 2), ('fana', 7), ('fana', 15)]AndreAndre

Đã trả lời ngày 2 tháng 8 năm 2016 lúc 1:324 gold badges28 silver badges39 bronze badges4 gold badges28 silver badges39 bronze badges

Câu trả lời của tôi, cho câu hỏi Bob trong khóa học:

>>> import re
>>> text = '1011101111'
>>> len(re.findall('(?=11)', text))
5
1

Đã trả lời ngày 22 tháng 1 năm 2015 lúc 22:30

Luke Dluke dOct 29, 2016 at 7:45Oct 29, 2016 at 7:45

1.9513 huy hiệu vàng15 Huy hiệu bạc16 Huy hiệu đồng

>>> import re
>>> text = '1011101111'
>>> len(re.findall('(?=11)', text))
5
2

Dưới đây là giải pháp EDX MIT "Tìm Bob"* của tôi (* Tìm số lượng "Bob" xảy ra trong một chuỗi có tên S), mà cơ bản tính các lần xuất hiện chồng chéo của một ứng cử viên đã cho:May 7, 2018 at 3:42May 7, 2018 at 3:42

Đã trả lời ngày 2 tháng 9 năm 2015 lúc 13:22AChampionAChampion

Dasdachsdasdachs3 gold badges55 silver badges70 bronze badges3 gold badges55 silver badges70 bronze badges

65912 Huy hiệu bạc16 Huy hiệu đồng

>>> import re
>>> text = '1011101111'
>>> len(re.findall('(?=11)', text))
5
3

Nếu chuỗi lớn, bạn muốn sử dụng Rabin-Karp, tóm lại:

một cửa sổ cuộn có kích thước chuỗi con, di chuyển qua một chuỗi

>>> import re
>>> text = '1011101111'
>>> len(re.findall('(?=11)', text))
5
4

Một hàm băm với O (1) Chi phí để thêm và loại bỏ (tức là di chuyển bằng 1 char)

>>> import re
>>> text = '1011101111'
>>> len(re.findall('(?=11)', text))
5
5

hoặc mở rộng cho máy phát điện:

>>> import re
>>> text = '1011101111'
>>> len(re.findall('(?=11)', text))
5
6

Thay thế

Bạn có thể sử dụng

>>> def occurrences(text, sub):
        return len(re.findall('(?={0})'.format(re.escape(sub)), text))

>>> occurrences(text, '11')
5
7:
>>> import re
>>> text = '1011101111'
>>> len(re.findall('(?=11)', text))
5
7

Đã trả lời ngày 1 tháng 9 năm 2018 lúc 22:57Sep 1, 2018 at 22:57Sep 1, 2018 at 22:57

Pylangpylangpylangpylang

36,5k11 Huy hiệu vàng121 Huy hiệu bạc111 Huy hiệu đồng11 gold badges121 silver badges111 bronze badges11 gold badges121 silver badges111 bronze badges

Một cách đơn giản để đếm sự xuất hiện của chuỗi con là sử dụng

>>> def occurrences(text, sub):
        return len(re.findall('(?={0})'.format(re.escape(sub)), text))

>>> occurrences(text, '11')
5
8:
>>> import re
>>> text = '1011101111'
>>> len(re.findall('(?=11)', text))
5
8

Bạn có thể sử dụng

Đã trả lời ngày 1 tháng 9 năm 2018 lúc 22:57Sep 1, 2018 at 22:57

Pylangpylangpylang

>>> sum(1 for _ in re.finditer('(?=11)', text))
5
0

36,5k11 Huy hiệu vàng121 Huy hiệu bạc111 Huy hiệu đồng11 gold badges121 silver badges111 bronze badgesJun 30, 2019 at 11:25

Một cách đơn giản để đếm sự xuất hiện của chuỗi con là sử dụng danbros

>>> def occurrences(text, sub):
        return len(re.findall('(?={0})'.format(re.escape(sub)), text))

>>> occurrences(text, '11')
5
9 để tìm các chuỗi chồng chéo nếu bạn biết phần nào sẽ chồng chéo:
>>> import re
>>> text = '1011101111'
>>> len(re.findall('(?=11)', text))
5
91 silver badge3 bronze badges

>>> sum(1 for _ in re.finditer('(?=11)', text))
5
1

Lưu ý rằng ngoài việc tĩnh, còn có những hạn chế khác:Sep 21, 2019 at 15:05

Đã trả lời ngày 30 tháng 6 năm 2019 lúc 11:25Jun 30, 2019 at 11:25

Danbrosdanbrosdanbros

1511 Huy hiệu bạc3 Huy hiệu đồng1 silver badge3 bronze badgesJan 7 at 20:22

Đã trả lời ngày 21 tháng 9 năm 2019 lúc 15:05Sep 21, 2019 at 15:05A T

Tôi muốn xem số lượng đầu vào của cùng một tiền tố char là cùng một postfix, ví dụ: 18 gold badges91 silver badges153 bronze badges

import regex as re

def count_overlapping(text, search_for):
    return len(re.findall(search_for, text, overlapped=True))

count_overlapping('1011101111','11')  # 5
0 và
import regex as re

def count_overlapping(text, search_for):
    return len(re.findall(search_for, text, overlapped=True))

count_overlapping('1011101111','11')  # 5
1 nhưng không thành công trên
import regex as re

def count_overlapping(text, search_for):
    return len(re.findall(search_for, text, overlapped=True))

count_overlapping('1011101111','11')  # 5
2:
>>> sum(1 for _ in re.finditer('(?=11)', text))
5
2

>>> sum(1 for _ in re.finditer('(?=11)', text))
5
3

Đã trả lời ngày 7 tháng 1 lúc 20:22Jan 7 at 20:22

Một ta tA TJul 2 at 20:07

12.3k18 Huy hiệu vàng91 Huy hiệu bạc153 Huy hiệu đồng18 gold badges91 silver badges153 bronze badges

>>> sum(1 for _ in re.finditer('(?=11)', text))
5
4

Giải pháp với các phần được thay thế của chuỗi

Trả lời là 4.30 gold badges107 silver badges129 bronze badges

Đã trả lời ngày 2 tháng 7 lúc 20:07Jul 2 at 20:07Sep 20, 2012 at 8:19

1

Nếu bạn muốn đếm số lượng hoán vị có độ dài 5 (điều chỉnh nếu muốn cho các độ dài khác nhau):

HimanshuTraverse 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.

30.8k30 Huy hiệu vàng107 Huy hiệu bạc129 Huy hiệu đồng30 gold badges107 silver badges129 bronze badges

Đã trả lời ngày 20 tháng 9 năm 2012 lúc 8:19Sep 20, 2012 at 8:19two rectangles overlap if the area of their intersection is positive. So, we can understand that two rectangles that only touch at the corner or edges do not overlap. If we have two (axis-aligned) rectangles, we have to check whether they overlap or not.

Làm thế nào để bạn chồng chéo hai chuỗi trong Python?

Khoa học dữ liệu thực tế bằng cách sử dụng Python tuân theo các bước dưới đây để giải quyết vấn đề.Khởi tạo hai chuỗi và một chuỗi trống.Lặp lại trong chuỗi đầu tiên và thêm ký tự hiện tại vào chuỗi mới nếu nó trình bày trong chuỗi thứ hai và không có trong chuỗi mới rồi.In kết quả.Initialize two strings and an empty string. Iterate over the first string and add the current character to the new string if it presents in the second string as well and not present in new string already. Print the result.Initialize two strings and an empty string. Iterate over the first string and add the current character to the new string if it presents in the second string as well and not present in new string already. Print the result.

Bao nhiêu lần một chuỗi chứa một chuỗi con 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. 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.