重走py 之路 ——列表(一)

前言

由於最近公司有python項目維護,因此把python的基礎入門的書整理一遍,由於有些忘記了,同時在看<<python編程>>這本書的時候以爲對有基礎的有不少的贅餘,打算直接整理不一樣之處。java

由於python 有2版本和3版本,若是新學的話,建議直接3版本,2版本已經不會再升級了,也就是再也不維護了。python

同時也規勸一句,若是是用python專門去作網站的話,那麼是不建議的,由於這不是python的強項。同時也不要誤覺得python動態語言性能效率就不適合作一些服務,由於有些服務性能不是一個瓶頸,可能問題在網絡一頭等。編程

總之一句話,py發展這麼快,一個是由於社區,同時也是由於python這門語言的設計上,那麼就先來看下列表吧,由於太經常使用了。噢,若是你還不會裝python,那麼直接百度吧,建議一開始直接exe安裝。c#

正文

在此以前呢,先介紹一個string類型,由於strign類型的介紹很簡短,那麼就直接放到這一小節中。數組

name="jack rose";
print(name.title())

那麼它會輸出,Jack Rose,這個title就是用來首字母大寫的。網絡

看下c# 的首字母大寫:Strings.StrConv("str.str.str str_str", VbStrConv.ProperCase, System.Globalization.CultureInfo.CurrentCulture.LCID);app

是的,python就是這麼方便,操做數據的方便,後面你能更加感覺到。函數

name="jack rose";
str1=name+1+"2";
print(name.title())

可是依然有值得注意的地方,在其餘高級語言如python和java中是沒得問題的,可是在py中是存在問題的。性能

Traceback (most recent call last):
  File "index.py", line 2, in <module>
    str1=name+1+"2";
TypeError: cannot concatenate 'str' and 'int' objects

爲何不會自動轉換呢?他們兩個對象不同,那麼就會失敗,爲啥會這樣呢?這個是涉及問題,來看下int 若是轉換爲str的。網站

a=str(1)
print(a)

和其餘語言不同,其餘語言有tostring,那麼轉換的時候就會調用tostring,而py中,是一個str函數,設計的不一樣意味着他們的寫法不一樣。

看下其餘幾個簡單的。

name=" jack rose ";
print(name.lstrip())

lstrip 是去除左邊的空格,而後rstrip 去除右邊的空格。在此說明的不是說lstrip這個函數,而是想說明,py有不少函數分爲左右,若是你發現一個函數有從左查詢,那麼必定有一個從右查詢,這就是爲啥py這麼方便,由於提供了太多函數。

是的,它的語義化,讓你不須要去尋找哪一個函數幹什麼的,從英文中就能推斷出。string 到此就結束了,那麼看到下本章的主要,列表。

增刪改查

首先python沒有數組,一門動態語言要啥數組呢?來看看其操做方便的列表。

name=" jack rose ";
list=['a','b','c']
print(list);

輸出:['a','b','c'],好吧這裏可能有人疑問這爲啥不是數組呢?你能夠理解爲這是一種語法。

爲了證實其不是一個string數組:

list=['a','b','c']
list.append(1);
print(list);

輸出:['a', 'b', 'c', 1]

好的上述你看到了添加,那麼看下插入吧。

list=['a','b','c']
list.append(1);
list.insert(0,1);
print(list);

輸出:[1, 'a', 'b', 'c', 1]

它的規則也很簡單,就是在當前位置寫入,其餘的位置日後移動。

在此說明一點,咱們能夠像索引同樣去訪問列表。

list=['a','b','c']
print(list[0]);

輸出a。除了這樣,咱們還能夠list[-1],將會返回'c',而不是異常,這讓咱們的計算方便不少,咱們不須要去計算最後一個位置的位置。
看下刪除:

list=['a','b','c']
del list[0]
print(list);

輸出:['b', 'c']

在這裏說明一下,不只是列表這樣刪除,其餘的類型也是這樣刪除的。

a='a';
del a;
print(a);

是的,這樣就沒有a了。

Traceback (most recent call last):
  File "index.py", line 5, in <module>
    print(a);
NameError: name 'a' is not defined

這樣說吧,a並無刪除,只是刪除了a和'a'的聯繫,就想指針指向同樣。

指定位置彈出:

list=['a','b','c']
list.pop();
print(list);

返回:[a,b]
那麼默認是彈出最後一個位置,若是指定位置的話,好比說第一個,那麼pop(0)便可。

那麼如何根據值來刪除呢?

list=['a','b','c','a']
list.remove('a');
print(list);

輸出值:['b', 'c', 'a']

能夠看到值刪除了一個,那麼若是所有刪除呢?這個後面系列將會介紹到,也許你如今能夠想象遍歷一下。對了有一個函數count,list.count('a')會計算a出現的次數,而正在的計算list大小,是經過len,這個函數,如len(list)

在咱們編程中排序時少不了的,有臨時排序還有永久排序。臨時排序就是返回一個新的list,永久就是直接修改list,他們分別對應的函數是:

list=['b','c','d','a']
print(sorted(list));
print(list);
list.sort();
print(list);

輸出:

['a', 'b', 'c', 'd']
['b', 'c', 'd', 'a']
['a', 'b', 'c', 'd']

在此你能夠知道sorted 是臨時排序,sort 是永久排序,值得總結的是:通常來講自身函數的調用是永久操做本身,而外部會創造另外一個對象。

再舉另一個例子:reverse,list.reverse是操做本身,而不是返回一個新對象,reversed(list);返回一個新對象。

循環

list=['b','c','d','a']
for item in list:
    print(item)

循環很是的簡單,可是值得注意的是list後面須要又要給:,這是須要注意的語法。

一樣須要介紹另一個東西,pass.

假如咱們for語句什麼都不作,好的,不要糾結爲啥什麼都不作。
那麼能夠這樣:

list=['b','c','d','a']
for item in list:
    pass

若是沒有pass,那麼將會報錯,pass 是佔位語句。

其餘的功能函數

前面介紹到,py操做數據是真的方便,那麼若是要生成一些數據是否一樣方便?

for item in range(0,10):
print(item);
輸出:

0
1
2
3
4
5
6
7
8
9

這樣就生成了0-9。前開後閉類型的。

一樣你能夠跳過一些:

for item in range(0,10,2):
    print(item);
0
2
4
6
8

一樣能夠進行一些統計:

list=range(0,10,2);
print(min(list));
print(max(list));
print(sum(list));

獲得0,8,20。

給各位介紹一個神器的語法,好比你想要上面的list增長1,而後賦值給一個新的list,那麼怎麼寫呢?

list=range(0,10,2);
list2=[item++1 for item in list]
print(list2);

這樣就是:[1, 3, 5, 7, 9]

這裏我寫的是item++1,這和咱們c# item++同樣,語法不通而已。

那麼若是我要複製一個list怎麼辦呢?

list=range(0,10,2);
list2=list[:]
print(list2);

這樣就行。[:]是否只能用來copy呢?固然不是,它是片切的一種語法。

list=range(0,10,2);
print(list);
list2=list[1:2]
print(list2);

輸出:

[0, 2, 4, 6, 8]
[2]

獲取從1開始,到2介紹,且不包含2。

仍是前開後閉原則。

除了能夠填寫正數,你還能夠填寫負數:

list=range(0,10,2);
print(list);
list2=list[-1:]
print(list2);

相信也猜到了,沒錯就是獲取最後一個。

元組

若是你但願你定下的一些數據被修改,那麼你可使用元組。

tuple=(100,200)

這樣就建立了一個元組,是的,把一些數據放在括號中。

元組通常用於查詢,他的函數也很是少。

下一節 基本操做。

相關文章
相關標籤/搜索