1. 程式人生 > >Python爬蟲踩坑之二分查詢,數值按位相加,

Python爬蟲踩坑之二分查詢,數值按位相加,

由於比較緊張,題當時沒寫完,昨天重新寫了下 二分查詢:

二分查詢又稱折半查詢,其核心就是在有序的表中,取中表的中間值和目標值來匹配,
中間值比目標值大,則繼續左子表中二分,反之同理。一直查到目標值與匹配值相等,
否則不存在。

題目:在數字列表中隨機兩個數使之等於給定值k 前提:

l=[2,5,6,7,3,4,11,3,45,222,34]
l.sort()
k=36

答1:最簡單的

res=[]
for i in l:
    y=k-i
    if y in l:
        res.append((i,y))
    else:
        pass
print(res)

二分:(只是用一下別在意為什麼用)

def num(l,n):
    index=int(len(l)//2)
    #l列表裡要兩個值如果len(l)=1:這時候程式會在遞迴中報錯,故只有一個值的時候單獨判斷
    if len(l)>1:
        if l[index]>n:
            return num(l[:index],n)
        elif l[index]<n:
            return num(l[index:],n)
        else:
            return l[index]
    else:
        if l[0]==n:
            return n
        return

#取中值,取索引差不多
if __name__=="__main__":
    res = []
    for i in l:
        if k>=i:
            y = k-i
            ress=num(l,y)
            if ress:
                res.append(ress)
    print(res)

還有一個題了就是給定兩個字串型別的數字,按位數相加

num1="14"
num2="277"
#先判斷長度,為不足位數的位置補充零,也可以不判斷,長度長的數只需要在短數的位數基礎上看大於短的那一部分上是否要加即可(報錯既結束程式)
if len(num1)>len(num2):
    num=num1
else:
    num=num2
sum=[0]*len(num)
# 最好遍歷短的這樣從程式上來會快一些,從各位開始
for i in range(-1,-len(num)-1,-1):
   #補充0,字串不可改
    if len(num1) <abs(i):num1="0"+num1
    elif len(num2)<abs(i):num2="0"+num2
    #同一位上的數相加大於9,總數-10,後一位加1
    if int(num1[i])+int(num2[i])>9:
        sum[i]+=(int(num1[i])+int(num2[i])-10)
        sum[i-1]=sum[i-1]+1
    else:
        sum[i] +=(int(num1[i]) + int(num2[i]))
sum=[str(i) for i in sum]
sun="".join(sum)
print(sun)

簡單實現下寫的繁瑣勿見怪