Tôi đang cố gắng tìm ra bao nhiêu lần một chuỗi xảy ra trong một chuỗi. Ví dụ:
nStr = '000123000123'
Giả sử chuỗi tôi muốn tìm là 123. Rõ ràng nó xảy ra hai lần trong NSTR nhưng tôi gặp khó khăn trong việc thực hiện logic này thành Python. Những gì tôi có vào lúc này:
pattern = '123'
count = a = 0
while pattern in nStr[a:]:
a = nStr[a:].find[pattern]+1
count += 1
return count
Câu trả lời sẽ trở lại là 2. Tôi đang bị mắc kẹt trong một vòng lặp vô hạn vào lúc này.
Tôi vừa mới biết rằng Bá tước là một cách tốt hơn nhiều để làm điều đó nhưng vì tò mò, có ai thấy cách để làm điều đó tương tự như những gì tôi đã có không?
Gino Mempin
21.4K25 Huy hiệu vàng87 Huy hiệu bạc115 Huy hiệu đồng25 gold badges87 silver badges115 bronze badges
hỏi ngày 13 tháng 7 năm 2012 lúc 18:59Jul 13, 2012 at 18:59
user1294377user1294377user1294377
1.0411 Huy hiệu vàng10 Huy hiệu bạc13 Huy hiệu đồng1 gold badge10 silver badges13 bronze badges
0
Sử dụng
pattern = '123'
count = a = 0
while pattern in nStr[a:]:
a = nStr[a:].find[pattern]+1
count += 1
return count
7:>>> nStr = '000123000123'
>>> nStr.count['123']
2
Một phiên bản làm việc của mã của bạn:
nStr = '000123000123'
pattern = '123'
count = 0
flag = True
start = 0
while flag:
a = nStr.find[pattern, start] # find[] returns -1 if the word is not found,
#start i the starting index from the search starts[default value is 0]
if a == -1: #if pattern not found set flag to False
flag = False
else: # if word is found increase count and set starting index to a+1
count += 1
start = a + 1
print[count]
Đã trả lời ngày 13 tháng 7 năm 2012 lúc 19:00Jul 13, 2012 at 19:00
Ashwini Chaudharyashwini ChaudharyAshwini Chaudhary
238K56 Huy hiệu vàng449 Huy hiệu bạc498 Huy hiệu Đồng56 gold badges449 silver badges498 bronze badges
1
Vấn đề với
pattern = '123'
count = a = 0
while pattern in nStr[a:]:
a = nStr[a:].find[pattern]+1
count += 1
return count
8 và các phương pháp khác được hiển thị ở đây là trong trường hợp các nền tảng chồng chéo.Ví dụ:
pattern = '123'
count = a = 0
while pattern in nStr[a:]:
a = nStr[a:].find[pattern]+1
count += 1
return count
9 trả về 2Nếu bạn muốn nó trở lại 4 [
>>> nStr = '000123000123'
>>> nStr.count['123']
2
0], bạn có thể thử một cái gì đó như thế này:def count_substrings[string, substring]:
string_size = len[string]
substring_size = len[substring]
count = 0
for i in xrange[0,string_size-substring_size+1]:
if string[i:i+substring_size] == substring:
count+=1
return count
count_substrings["aaaaaa", "aaa"]
# 4
Không chắc chắn nếu có một cách hiệu quả hơn để làm điều đó, nhưng tôi hy vọng điều này làm rõ cách thức hoạt động của
pattern = '123'
count = a = 0
while pattern in nStr[a:]:
a = nStr[a:].find[pattern]+1
count += 1
return count
8.Đã trả lời ngày 5 tháng 6 năm 2013 lúc 3:49Jun 5, 2013 at 3:49
1
import re
pattern = '123'
n =re.findall[pattern, string]
Chúng ta có thể nói rằng phần "mẫu 'của nền tảng xuất hiện LEN [n] lần trong' chuỗi '.
David c
6.9344 Huy hiệu vàng48 Huy hiệu bạc65 Huy hiệu Đồng4 gold badges48 silver badges65 bronze badges
Đã trả lời ngày 16 tháng 7 năm 2012 lúc 5:18Jul 16, 2012 at 5:18
1
Trong trường hợp bạn đang tìm kiếm cách giải quyết vấn đề này cho các trường hợp chồng chéo.
s = 'azcbobobegghaklbob'
str = 'bob'
results = 0
sub_len = len[str]
for i in range[len[s]]:
if s[i:i+sub_len] == str:
results += 1
print [results]
Sẽ dẫn đến 3 vì: [AZC [Bob] Obegghaklbob] [Azcbo [Bob] Egghaklbob] [Azcbobobegghakl [Bob]]
Đã trả lời ngày 7 tháng 6 năm 2019 lúc 17:36Jun 7, 2019 at 17:36
TawabgtawabgTawabG
4825 Huy hiệu bạc8 Huy hiệu Đồng5 silver badges8 bronze badges
Tôi khá mới, nhưng tôi nghĩ đây là một giải pháp tốt? có lẽ?
def count_substring[str, sub_str]:
count = 0
for i, c in enumerate[str]:
if sub_str == str[i:i+2]:
count += 1
return count
Đã trả lời ngày 14 tháng 9 năm 2019 lúc 0:47Sep 14, 2019 at 0:47
String.Count [Subring] không hữu ích trong trường hợp chồng chéo.
Cách tiếp cận của tôi:
def count_substring[string, sub_string]:
length = len[string]
counter = 0
for i in range[length]:
for j in range[length]:
if string[i:j+1] == sub_string:
counter +=1
return counter
Đã trả lời ngày 16 tháng 2 năm 2017 lúc 10:56Feb 16, 2017 at 10:56
Gaurav Parashargaurav ParasharGaurav Parashar
1.0282 Huy hiệu vàng14 Huy hiệu bạc21 Huy hiệu đồng2 gold badges14 silver badges21 bronze badges
Bạn không thay đổi
>>> nStr = '000123000123'
>>> nStr.count['123']
2
2 với mỗi vòng lặp. Bạn nên đặt:a += nStr[a:].find[pattern]+1
...thay vì:
pattern = '123'
count = a = 0
while pattern in nStr[a:]:
a = nStr[a:].find[pattern]+1
count += 1
return count
0
e_i_pi
4.4314 Huy hiệu vàng25 Huy hiệu bạc45 Huy hiệu Đồng4 gold badges25 silver badges45 bronze badges
Đã trả lời ngày 4 tháng 1 năm 2018 lúc 4:07Jan 4, 2018 at 4:07
pattern = '123'
count = a = 0
while pattern in nStr[a:]:
a = nStr[a:].find[pattern]+1
count += 1
return count
1Đã trả lời ngày 23 tháng 10 năm 2018 lúc 15:13Oct 23, 2018 at 15:13
Như đã đề cập bởi @joão pesce và @gaurav,
pattern = '123'
count = a = 0
while pattern in nStr[a:]:
a = nStr[a:].find[pattern]+1
count += 1
return count
8 không hữu ích trong trường hợp các nền tảng chồng chéo, hãy thử điều này ...pattern = '123'
count = a = 0
while pattern in nStr[a:]:
a = nStr[a:].find[pattern]+1
count += 1
return count
2Đã trả lời ngày 11 tháng 2 năm 2019 lúc 12:44Feb 11, 2019 at 12:44
pattern = '123'
count = a = 0
while pattern in nStr[a:]:
a = nStr[a:].find[pattern]+1
count += 1
return count
3
Shir
1.11612 huy hiệu bạc35 huy hiệu đồng12 silver badges35 bronze badges
Đã trả lời ngày 22 tháng 4 năm 2019 lúc 9:13Apr 22, 2019 at 9:13
Thông thường tôi đang sử dụng liệt kê cho loại vấn đề này:
pattern = '123'
count = a = 0
while pattern in nStr[a:]:
a = nStr[a:].find[pattern]+1
count += 1
return count
4Đã trả lời ngày 23 tháng 4 năm 2020 lúc 2:25Apr 23, 2020 at 2:25
1
Def Count [Sub_String, String]:
pattern = '123'
count = a = 0
while pattern in nStr[a:]:
a = nStr[a:].find[pattern]+1
count += 1
return count
5Đã trả lời ngày 9 tháng 6 năm 2020 lúc 7:02Jun 9, 2020 at 7:02
pattern = '123'
count = a = 0
while pattern in nStr[a:]:
a = nStr[a:].find[pattern]+1
count += 1
return count
6Đã trả lời ngày 19 tháng 12 năm 2021 lúc 22:53Dec 19, 2021 at 22:53
1