寒假本來(lái)是打算開(kāi)始公司新項(xiàng)目,結(jié)果美工太拖了。于是一邊搞其他東西,一邊做leetcode。熟悉了一下django,還有復(fù)習(xí)了python,學(xué)習(xí)到了很多技巧,關(guān)于python的。
- python的三目表達(dá)式
python中是沒(méi)有類(lèi)似于PHP或者C++那些的三目表達(dá)式的,一開(kāi)始我是比較納悶的,因?yàn)閜ython這樣的語(yǔ)言,要是連這種語(yǔ)法結(jié)構(gòu)都沒(méi)有就太奇怪了。于是后來(lái)找到了類(lèi)似的東西。
//這是php的寫(xiě)法,基本相同與其他語(yǔ)言
function fun()
{
return 1==2?1:2;
}
def fun():
return 1 if 1==2 else 2
- python的for循環(huán)
我在寫(xiě)leetcode的時(shí)候是經(jīng)常使用到for循環(huán)的,因?yàn)榻?jīng)常有變量需要遍歷,python的for循環(huán)不同與其他語(yǔ)言,但是我覺(jué)得使用起來(lái)其實(shí)還是蠻方便的
#這里假設(shè)有一個(gè)叫做data的list變量
for x in data:
這樣的寫(xiě)法是直接遍歷數(shù)組變量了,遍歷不了下標(biāo),有時(shí)候很需要使用下標(biāo),就要使用另外一種方法
for x in range(len(data)):
for x in xrange(len(data)):
這兩種方法是數(shù)組遍歷下標(biāo)的方法,但是有區(qū)別,range和xrange的速度上是不一樣的,詳細(xì)可以百度一下。
有時(shí)候會(huì)遇到一種情況,需要從數(shù)組的最后一個(gè)數(shù)往前遍歷,以往PHP或者java那些的做法是for循環(huán)下標(biāo)往前遍歷,python也能那么寫(xiě),但是有些地方需要注意。
for x in xrange(len(data)-1,-1,-1):
往前循環(huán)的時(shí)候,下標(biāo)是從你傳入?yún)?shù)的第一個(gè)數(shù)開(kāi)始循環(huán)的,而不是和往后循環(huán)的時(shí)候一樣的。比如:xrange(9) 循環(huán)的結(jié)果是0--8,xrange(9,-1,-1)循環(huán)的結(jié)果是9--0。之前好多次寫(xiě)算法的時(shí)候沒(méi)注意,導(dǎo)致數(shù)組越界。
- python的sort函數(shù)
在C++中,sort函數(shù)是algorithm庫(kù)中的一個(gè)函數(shù),最實(shí)用的功能就是可以根據(jù)類(lèi)的某項(xiàng)屬性排序類(lèi),在vector這些地方非常實(shí)用,大一暑假項(xiàng)目實(shí)訓(xùn)的時(shí)候,寫(xiě)高考預(yù)錄取信息系統(tǒng),為了排序考生的成績(jī),C++的sort就幫了不少忙。
python的sort也很好用,但是主要那時(shí)候我還不夠熟悉。
sort(key=lambda x:x.start)
這種寫(xiě)法就是可以實(shí)現(xiàn)類(lèi)排序的寫(xiě)法了,Merge Intervals里,第一次用上。
sort 和 sorted
具體可以百度,這里只講一點(diǎn),就是sorted會(huì)返回一個(gè)結(jié)果,sort會(huì)改變結(jié)構(gòu)。python的速度
其實(shí)python的速度相對(duì)是可以了,我在完成一道題的時(shí)候,使用了三種語(yǔ)言對(duì)比(C++,JAVA,PYTHON),python的速度比較中肯。遞歸和迭代
遞歸寫(xiě)起來(lái)很舒服,兩三句話(huà)搞定,但是速度就太一般了,我在爬樓梯的時(shí)候,分別使用了迭代和遞歸,遞歸寫(xiě)起來(lái)不要太舒服。
class Solution {
public:
int climbStairs(int n)
{
if (n == 1 || n == 2)
return n == 1 ? 1 : 2;
return climbStairs(n - 1) + climbStairs(n - 2);
}
};
超時(shí)了,無(wú)解。
但是使用迭代,速度是2MS。
- 還有的想不起來(lái)了,沒(méi)有及時(shí)總結(jié),過(guò)年太頹廢了,一行代碼都沒(méi)有寫(xiě)。leetcode的easy還有幾道題,希望戒掉拖延癥,這個(gè)學(xué)期內(nèi),利用瑣碎的時(shí)間完成leetcode所有題目。有夢(mèng)想的人不睡覺(jué)。