近期想系統性的學習學習python,我想著瞭解一門語言是不是最開始就要會用他的一些基本語法來寫題呢,抱著這個想法我就開始用c++寫完一道題後用py再寫一遍.
但是py主要的一些語法還好,只是表現形式不同而已,但是py的輸入輸出和陣列方面相對來說特殊不少,或者根本就沒有陣列這個概念,(當然了在numpy中還是有的).但是對於我這種之前一直用c++突然開始用py的來說,陣列完全不知道如何定義了,網上也很難搜到自己完全想要的.
再後來看見別人的python演算法題集自己也才慢慢會寫會用了,故想記錄一下,能幫到人最好了.
(以前用py只是想去實現一些功能,對於陣列啥的定義現在細想還真是從來沒有涉及到過。一般的像表格也是直接讀取就存好了,後序的用法就沒區別了,系統性的開始學的話還是搞清楚會更好)
首先是正常的一維陣列,定義方法大概就是下面兩種:
l = [0] * n #表示建立一個長度為n的陣列,陣列的每個元素都是0
l = [0 for _ in range(n)] #表示建立一個長度為n的陣列,陣列的每個元素都是0
再來就是二維陣列,其實方法也與一位陣列類似,套兩層就好:
l_2 = [[0 for _ in range(n)] for _ in range(n)]
不過需要注意的是
l_2 = [[0] * n] * n
看似是一個二維陣列,但其實不是的,比如說你把l_2[0][0] = 1
實質上l_2[1][0]
,l_2[2][0]
都會為1,他只是將一個一維陣列引用了n次而已。
我不太清楚常用二維陣列的定義是否還有別的,但是這一個肯定是沒問題的
然後就是大家可能需要的值輸入的問題了,這個方面py相對於c++非常特殊,可以對著註釋好好看:
n = input() # input() returns a string
n = int(input()) # 轉化為int型,其中必須是換行結尾
m = int(input()) # 此時m不能與n在同一行,雖然不會報錯但是會出現邏輯錯誤
#實現了一行輸入多個變數,用空格隔開,split實質上就是分割函式,在很多語言都有這個函式,但是返回的任然是字串
m , n = input().split()
#會報錯,後面的split()返回的是一個列表,不能直接賦值給兩個變數
m , n = int(input().split())
#正確的寫法
m , n = map(int , input().split())
這個輸入完之後就是陣列的輸入,這個也是很特殊的(沒學py時的感受):
#輸入一行數以回車為結束標誌,將這些數存入一個列表中
l = list(map(int,input().split()))
#輸入二維陣列,每行以回車為結束標誌,這第二維是限制了的,但是第一維並沒有,這個按照要求輸入即可
l = [list(map(int,input().split())) for _ in range(10)]
py還有一些有是好用的構造方法,也可以瞭解一下:
l = [x ** 2 for x in range(10)]
print(l)
#[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
#這個就是直接把x的平方放到列表裡面
# 還能兩個一起
l = [x + y for x in range(3) for y in range(3)]
print(l)
#假設我們想知道abcde和hijn各取一個字元組成的所有的長度為2的字串,不考慮順序
l = [x + y for x in 'abcde' for y in 'hijn']
print(l)
#['ah', 'ai', 'aj', 'an', 'bh', 'bi', 'bj'......]
有一說一隻想用py寫專案之類,搞機器學習啊,做後臺啥的話這些基本上用不上
寫到這想記錄的東西也就結束了,其他的什麼函式之類私以為差別不大,用的時候搜一下很快就記得了,之後有多的再加吧。