Python第二周 學習筆記(1)

來源:互聯網
上載者:User

標籤:學習筆記

深淺拷貝

==比較的是資料內容,如果是True意義為內容相同,引用並不同
=操作執行後,前後兩個元素的引用地址相同

淺拷貝copy() -> List

返回一個新的列表
參考型別只拷貝引用地址

深拷貝

完全拷貝。包括參考型別

from copy import deepcopylst2=deepcopy.(lst)

隨機數
import random
randint(a, b)

返回[a, b]之間的整數,閉區間

choice(seq)

從非空序列的元素中隨機挑選一個元素,比如

random.choice(range(10))

,從0到9中隨機挑選一個整數。

random.choice([1,3,5,7])
randrange ([start,] stop [,step])

從指定範圍內,按指定基數遞增的集合中擷取一個隨機數,基數
預設值為1。

random.randrange(1,7,2) 

前閉後開

random.shuffle(list) ->None

就地打亂列表元素

sample(population, k)

從樣本空間或總體(序列或者集合類型)中隨機取出k個不同的元素,返回
一個新的列表

元組

有序的元素集合

初始化:
t=tuple()t=()t=(1,)

元組查詢與列表類似

元組元素不可修改

注意:
對於包含複雜物件的元組,其指向複雜物件的引用地址不可更改,但複雜物件的資料內容可更改

namedtuple
from collections import namedtuplePoint=namedtuple(‘Point‘,[‘x‘, ‘y‘])#Point=namedtuple(‘Point‘,‘x y‘) 第二種寫法p1=Point(11,12)print(p1.x,p1.y)
部分源碼:
if isinstance(field_names, str):    field_names = field_names.replace(‘,‘, ‘ ‘).split()field_names = list(map(str, field_names))typename = str(typename)
字串習題解析:1.運用數組實現求10萬以內質數:
prime = [2]for i in range(3,100000,2):    flag = False    up = int(i**0.5)+1    for j in prime:        if i % j == 0:            flag = False            break        if j >= up:            flag = True            break        if flag:        prime.append(i)print(len(prime))
2.楊輝三角:方法一(1)迭代後首尾加元素1:
n=6pre=[[1]]for i in range(n):    line=pre[i]    temp=[1]    for j in range(i):        temp.append(line[j]+line[j+1])    temp.append(1)    pre.append(temp)print(pre)
方法一(2):
n = 6pre = [1]for i in range(n):    temp = [1]    for j in range(i):        temp.append(pre[j] + pre[j + 1])    temp.append(1)    print(pre)    pre = temp
方法二 列表前後或後補元素0迭代:
n=6pre=[1]for i in range(1,n):    pre.append(0)    newline=[]    for j in range(i+1):        var=pre[j-1]+pre[j]        newline.append(var)    print(newline)    pre=newline
方法三(1)提前建立好寬度合適、充滿1的列表,將計算的結果其他清單中對應位置的數,採用對稱性一次迴圈將對稱的兩個元素一併替換:
n=6triangle=[]for i in range(n):    temp=[1]*(i+1)    for j in range(1,i//2+1):        var=triangle[j-1]+triangle[j]        temp[j]=var        if i!=2*j:            temp[-j-1]=var    triangle=temp    print(temp)
方法三(2):
n = 6triangle = []for i in range(n):    temp = [1] * (i + 1)    triangle.append(temp)    for j in range(1,i // 2 + 1):        var = triangle[i - 1][j - 1] + triangle[i - 1][j]        temp[j] = var        if i != 2 * j:            temp[- j - 1] = var    print(temp)    pre = temp
方法四 只開闢最大長度的一個充滿1的列表,加入一個臨時變數儲存替換的元素,參與下一次計算,採用對稱性,注意更改對稱元素時,其索引值需加入一個位移量,輸入時對列表切片:
n = 6triangle = [1] * nfor i in range(n):    temp = 1    for j in range(1,i // 2 + 1):        var = temp + triangle[j]        temp = triangle[j]        triangle[j] = var        if i != j * 2:            triangle[- j - (n - i)] = var    print(triangle[: i + 1])
冒泡法排序

時間複雜度O(n**2)

方法一:
lst=[9,8,7,6,5,4,3,2,1]cnt=0cnt_swap=0for i in range(len(lst)-1):    for j in range(len(lst)-i-1):        cnt+=1        if lst[j]>lst[j+1]:            lst[j],lst[j+1] = lst[j+1],lst[j]            cnt_swap+=1print(lst,cnt,cnt_swap)
方法二(最佳化):最佳化點:如果當一個內迴圈結束後,並沒有發生元素交換的操作,則剩下的元素已經是順序的了,無需再往下執行
#lst = [9,8,7,6,5,4,3,2,1]#lst = [1,2,3,4,6,5,7,8,9]lst = [2,1,3,4,5,6,7,8,9]cnt = 0cnt_swap = 0for i in range(len(lst) - 1):    flag = False     for j in range(len(lst) - i - 1):        cnt += 1        if lst[j] > lst[j + 1]:            lst[j],lst[j + 1] = lst[j + 1],lst[j]            flag = True            cnt_swap += 1    if not flag:        breakprint(lst,cnt,cnt_swap)

Python第二周 學習筆記(1)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.