[英]Getting double of desired output
有一個二進制字符串。 我們必須計算以“1”開頭和結尾的子字符串的數量。 我已經采用了這種方法,但沒有獲得所需的輸出 請告訴我代碼在哪里失敗。
代碼-:
st="1001101"
c=0
for i in st:
if i=='1':
for j in st[st.index(i)+1:]:
if j=='1':
c+=1
print(c)
問題在於st.index(i)
因為你有多個1
它總是取第一個
您可以使用enumerate
來獲取索引和字母,作為起始字母
value = "1001101"
counter = 0
for idx, iletter in enumerate(value):
if iletter == '1':
for jletter in value[idx + 1:]:
if jletter == '1':
counter += 1
print(counter) # 6
使用列表理解,您還可以計算符合要求的索引對,然后只取長度
pairs = [(i, j) for i in range(len(value))
for j in range(i + 1, len(value))
if value[i] == value[j] == "1"]
# [(0, 3), (0, 4), (0, 6), (3, 4), (3, 6), (4, 6)]
print(len(pairs)) #6
這其實是一道數學題……要知道答案,你只需要數1的個數(稱之為c1),那么答案就是nCr(n=c1, r=2)
st="1001101"
c1=0
for i in st:
if i=='1': c1+=1
c=c1*(c1-1)//2
print(c)
順便說一句,有問題的代碼失敗,因為st.index(i)
始終為 1。您從 st 中找到 i='1' 的第一次出現,但 st 以 '1' 開頭(或邏輯上從字符串中的第一個 '1' )。 要糾正它:
st="1001101"
c=0
st_len=len(st)
for i in range(0, st_len):
if st[i]=='1':
for j in range(i+1, st_len):
if st[j]=='1':
c+=1
print(c)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.