簡體   English   中英

獲得所需輸出的兩倍

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM