數據結構列表練習

數據結構列表練習

1、求10萬內的所有素數
    import datetime
    start=datetime.datetime.now()
    import math
    primenumber = [2]
    flag = False
    for i in range(3,100000,2):
        if i > 10 and i % 10 == 5:
            continue
        edge = math.ceil(math.sqrt(i))
        for j in primenumber:
            if i % j == 0 :
                flag = True
                break
            if j >= edge:
                flag = False
                break
        if not flag:
            print(i)
            primenumber.append(i)
    delta = (datetime.datetime.now() - start).total_seconds() #時間計算
    print(delta)

2、計算楊輝三角前6行
(1)方法1:補頭和尾,中間循環
    triangle = [[1],[1,1]]
    n = 6
    for i in range(2,n):
        newline = [1]
        pre = trangle[i-1]
        for j in range(i-1):
            val = pre[j] + pre[j+1]
            newline.append(val)
        newline.append(1)
        trangle.append(newline)
    print(trangle)

(2)方法1變體
    n = 6
    for i in range(n): #如果不想每次判斷,則把[1]放在循環外邊
        newline = [1]
        if i == 0:
            print(newline)
            continue
        for j in range(i-1):
            val = pre[j] + pre[j+1]
            newline.append(val)
        newline.append(1)
        print(newline)
        pre = newline

(3)方法2:尾部補0法
    n = 6
    for i in range(1,n):
        if i == 0:
            newline = [1]
            print(newline)
            newline.append(0)
            oldline = newline
            continue            
        newline = []
        for j in range(i+1):
            newline.append(oldline[j-1] + oldline[j])
        print(newline)
        newline.append(0)
        oldline = newline

(4)方法2變體:尾部補0法
    n = 6
    newline = [1]
    print(newline)
    newline.append(0)
    for i in range(1,n):
        newline = []
        for j in range(i+1):
            newline.append(oldline[j-1] + oldline[j])
        print(newline)
        newline.append(0)
        oldline = newline

(5)方法3:一次性開闢空間,再對稱。
    n = 6
    triangle = []
    for i in range(n):
        row = [1] * (i+1) #一次性開闢
        triangle.append(row)
        for j in range(1,i//2+1): # i=2,第三行才能進來
            val = triangle[i-1][j-1] + triangle[i-1][j]
            row[j] = val
            if i != 2*j: #奇數個數的中點跳過
                row[-j-1] = val
    print(triangle)

(6)方法4:單行覆蓋
    n = 6
    row = [1] * n #一次性開闢足夠的空間
    for i in range(n):
        offset = n - i
        z = 1 #因爲會有覆蓋影響計算,所以引入一個臨時變量
        for j in range(1,i//2+1):
            val = z + row[j]
            row[j],z = val,row[j]
            if i != 2*j:
                row[-j-offset] = val
        print(row[:i+1])

3、依次接收用戶輸入的3個數,排序後打印
(1)分支結構
    nums = []
    out = None
    for i in range(3):
        nums.append(int(input('{}: '.format(i))))
    if nums[0]>nums[1]:
        if nums[1]>nums[2]:
            out = [0,1,2]
        elif nums[0]>nums[2]:
            out = [0,2,1]
        else:
            out = [2,0,1]
    elif nums[0]>nums[2]:
        out = [1,0,2]
    elif nums[1]>nums[2]:
        out = [1,2,0]
    else:
        out = [2,1,0]
    out.reverse()
    for i in out:
        print(nums[i],end=',')

(2)max函數
    nums = []
    out =  None
    for i in range(3):
        nums.append(int(input('{}: '.format(i))))
    #此處不能使用for循環,不能一邊迭代該列表,同時刪除或者增加該列表
    while True:
        cur = max(nums)
        print(cur)
        nums.remove(cur)
        if len(nums) == 1:
            print(nums[0])
            break

(3)列表sort實現   
    nums = []
    for i in range(3):
        nums.append(int(input('{}: '.format(i))))
    nums.sort()
    print(nums)

4、經典冒泡法。
(1)初始實現
    lst = [9,5,1,2,6]
    length = len(lst)
    for i in range(length):
        for j in range(length-1-i):
            if lst[j] > lst[j+1]:
                lst[j], lst[j+1] = lst[j+1], lst[j]
    print(lst)

(2)優化實現
    lst = [9,5,1,2,6]
    length = len(lst)
    for i in range(length):
        flag = False
        for j in range(length-1-i):
            if lst[j] > lst[j+1]:
                lst[j], lst[j+1] = lst[j+1], lst[j]
                flag = True
        if not flag:
            break
    print(lst)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章