Python入門之列表

                                                    Python入門之列表


一、什麼是列表

爲了是程序能方便的存儲的操作數據,python語言提供一些內置的數據結構。

例如:列表、元組、字典和集合等。所謂的“內置”,指的是他們是python語言的一部分,

因此在程序中可以直接使用他們。


1、列表的結構

python的列表,相當於其他編程語言的數組。

>>> mylist = [1,2,3,4]

>>> mylist

[1, 2, 3, 4]


2、列表的特點

● 列表中所有的數據都是按順序排列的,也就是說,列表屬於順序類型

● 列表找那個的所有數據都是有兩個整數類型的索引,通過制定索引總能映射到唯一確定的數據

● 列表中可以存在重複的數據

● 列表中可以保存任何類型的數據,多種類型的數據可以混合存儲。

● 列表可以根據需要動態的伸縮,也就是說,系統會根據需要動態的分配和回收內存。因此無需事先聲明列表的容量。


二、列表的創建

● 列表中可以存儲任意類型的對象

創建列表的兩種方法

1、使用中括號[]

L = ['python',19,True]
print (L)
['python', 19, True]

空列表創建

L = []

2、使用list的構造方法

L = list(range(0,8,2))
print (L)
[0, 2, 4, 6]

空列表的創建

L = list()
print (L)
[]


三、列表的增刪改查

1、列表查操作

a)、列表中元素的索引

 列表中的每個元素都有兩個整數類型的索引

   0    1    2    3    4     正數索引

--------------------------

|  a |  b |  c |  d |  e |        列表

--------------------------

  -5   -4   -3   -2   -1     負數索引


b)、獲取列表中指定元素的索引

● index方法

查找元素的指定索引,如果索引不存在會拋出值錯誤。可以指定查找索引的start和stop。

L = [1,2,6,9,4,6,7]
print (L.index(2))  # 1
print (L.index(6))  # 2  相同元素返回第一個元素的索引
print (L.index(11)) #ValueError: 11 is not in list 不存在的元素,會拋出值錯誤
print (L.index(2,0,5)) # 1 查找元素2的索引,從索引0開始,至5結束,但不包含5
print (L.index(6,3,6)) # 5 查看元素6的索引,從索引0開始,至6結束,但不包含6

c)、使用[n]獲得列表中元素,但一次只能獲得一個元素

L = [1, 2, 6, 9, 4, 6, 7]
print (L[0])  # 1  獲取索引爲0的元素
print (L[-3]) # 4  獲取索引爲-3的元素
print (L[-8]) #IndexError: list index out of range 如果索引不存在,則索引越界錯誤。


d)、使用切片或者列表中的元素,一次獲得多個元素

● 語法格式 [start:stop:step]

1、得到的切片仍然是列表,是原始列表片段的一份拷貝

2、得到的切片不包括索引stop對應的元素

3、如果不指定step,其默認值爲1,此時語法格式可以簡化爲[start:stop]

4、當step爲正數時,

   如果不指定start,切片的第一個元素默認爲列表的第一個元素

   如果不指定stop,切片的最後一個元素默認是列表的最後一個元素

   從索引start開始計算切片

5、當step爲負數時,

   如果不指定start,切片的第一個元素默認是列表的最後一個元素

   如果不指定stop,切片的最後一個元素默認爲列表的第一個元素

   從索引start開始往前計算切片


L = [5,6,3,1,9,8,4]
print (L[1:5]) # [6, 3, 1, 9]
print (L[::])  # [5, 6, 3, 1, 9, 8, 4] 列表所有值
print (L[::-1]) # [4, 8, 9, 1, 3, 6, 5] 列表所有值反轉
print (L[:3:-1]) #[4, 8, 9] step爲負數時,不指定start,則爲最後一個元素,stop爲3則是索引3,步長爲1
print (L[-3::-1]) #[9, 1, 3, 6, 5] step爲負數時,不指定stop,則爲最後一個元素,start爲索引-3對應的值,步長爲1


● 索引切片是允許越界的

L = [5, 6, 3, 1, 9, 8, 4]
print (L[:100]) #[5, 6, 3, 1, 9, 8, 4] #起始索引不指定,默認爲第一個元素.但100超出最大索引,則打印全部列表
print (L[-100:]) #[5, 6, 3, 1, 9, 8, 4] #結束索引不指定,默認爲最後一個元素,起始索引爲-100(-7最後一個負數索引),打印全部列表


● 調用slice構造方法

slice() list[slice(start,stop,step)]
L = [5, 6, 3, 1, 9, 8, 4]
print (L[slice(1,5,2)]) # [6, 1]
print (L[1:5:2]) # [6, 1]
print (L[slice(None,None,None)]) #[5, 6, 3, 1, 9, 8, 4],默認值爲None
print (L[::]) #[5, 6, 3, 1, 9, 8, 4]

e) 、'in' or 'not in'檢查元素是否存在列表中

L = [5, 6, 3, 1, 9, 8, 4]

in
print (3 in L) #存在則爲True
True
print (11 in L) #不存在爲False
False

not in
print (1 not in L) 1存在列表中,not in返回爲False
False
print (11 not in L) 11不存在列表中,in返回爲True
True


2、列表增操作

a)、使用append()函數

'''
append()方法,在末尾添加值
'''
L = [1,2,3,4]
L.append(5)
print (L)
#[1, 2, 3, 4, 5]
L.append([7,8])
print (L)
#[1, 2, 3, 4, 5, [7, 8]]


b)、使用extend()方法,將所有元素依此添加至末尾

'''
調用extend方法,list.extend([])小括號中是方括號
'''
L = [1,2,3,4]
L.extend([1,2])
print (L)
[1, 2, 3, 4, 1, 2]


c)、調用insert方法

'''
調用insert方法,將值插入指定位置
'''
L = [1,2,3,4]
L.insert(1,6)
print (L)
#[1, 6, 2, 3, 4]
#在列表末尾
L.insert(len(L),10)
print (L)
#[1, 6, 2, 3, 4, 10]


d)、爲指定的切片賦予一個新值

L = [2,3,4,1]
L[2:2] = [5,6]
print (L)
L = [2,3,4,1]
L[len(L):] = [7,8]
print (L)


3、列表改操作

想要修改列表中的元素,有兩種常見的方式

a)、爲指定索引的元素賦予一個新值(一次只修改一個元素)

'''
將索引爲1對應的元素值改爲9,一次只修改一個值
'''
L = [3,2,0,1,2,1]
L[1] = 9
print (L)
[3, 9, 0, 1, 2, 1]


b)、指定多個索引,一次修改多個元素


'''
修改元素索引1:4的值,對應值要使用[]
左邊取得的索引值可以和右邊賦予的值個數不相同
'''
L = [3,2,0,1,2,1]
L[1:4] = [4,5,6]
print (L)
[3, 4, 5, 6, 2, 1]
L[1:4] = [3,7]
print (L)
[3, 3, 7, 2, 1]
L[2:3] = [9]
print (L)
[3, 3, 9, 2, 1]


4、列表刪操作

a) 、調用方法remove一次只刪除一個元素,如果有相同元素,則刪除第一個

L = [2,3,4,5,6]
L.remove(3)
print (L)
L = [3,4,3,1,2]
L.remove(3)
print (L)


b)、調用方法pop,一次只刪除一個指定索引的元素。

如果指定的索引不存在,會拋出index error,索引越界。如果不指定pop刪除的索引,那麼將刪除列表中最後一個元素。

L = ['a','b','c','d','e']
print (L.pop(1)) # b,pop實際有返回值
print (L) # ['a', 'c', 'd', 'e']
print (L.pop())
print (L) #['a', 'b', 'c', 'd']


c)、使用del語句,一次至少刪除一個或多個元素

L = [1,2,3,4,5,6]
del L[1]
print (L)
del L[1:3]
print (L)


d)、給指定的切片賦值一個空列表,一次至少刪除一個或多個元素

L = [1,2,3,4,5,6,7,8]
L[2:3] = []
print (L) #[1,2,3,5,6,7,8]
L[3:6] = []
print (L) ##[1,2,3,8]


e)、調用方法clear清空列表

L = [1,2,3,4,5]
L.clear()
print (L) #[]


四、使用加法和乘法對列表進行操作

1、使用加法對列表進行操作,當使用+=運算符時候會對列表本身產生影響

L1 = [1,2]
L2 = [3,4]
L3 = L1 + L2
print (L1,L2,L3) #列表之間相加 [1, 2] [3, 4] [1, 2, 3, 4]


L1 = L2 = [1,2]
L1 += [3,4]
print (L1,L2) #使用+=運算符會對L2也產生影響 [1, 2, 3, 4] [1, 2, 3, 4]
L1 = [1,2]
L2 = L1[:]
L1 += [3,4]
print (L1,L2) #[1, 2, 3, 4] [1, 2]


2、使用乘法對列表進行操作,使用*=運算符時候會對列表本身產生影響

L1 = [1,2,3]
L2 = [4,5,6]
L1 = L1 * 2
print (L1) #[1, 2, 3, 1, 2, 3]

L1 = L2 = [1,2]
L1 *= 2
print (L1,L2) #[1, 2, 1, 2] [1, 2, 1, 2]

L1 = [0]
L1 *= 5
print(L1) #[0, 0, 0, 0, 0] 可用於創建指定元素個數的列表


五、列表反轉

1、調用方法 reverse,對列表中所有元素進行反轉

L = [1,2,3,4,5]
L.reverse()
print (L)


2、調用內置函數reversed,使用reversed進行反轉的列表不發生改變,reversed返回值是一個迭代器對象

L = [1,2,3,4,5]
L1 = reversed(L)
print (L1)  #<list_reverseiterator object at 0x7f8f070f1390>
print (list(L1)) #[5, 4, 3, 2, 1]


六、列表的排序

1、調用方法sort()

#sort(),會對列表本身造成影響
L2 = ['java','python','shell']
L2.sort(key = len)
print(L2)  #根據字符串長度進行排序,['java', 'shell', 'python']
L2 = [1,3,4,2,6,9,8,7]
L2.sort()
print(L2) #[1, 2, 3, 4, 6, 7, 8, 9]


2、調用內置函數sorted() 

sorted(),不會對列表本身造成影響
L2 = ['java','shell','python']
print(sorted(L2,key = str.upper)) #['java', 'python', 'shell']

L2 = [1,3,4,2,6,9,8,7]
print(sorted(L2)) #[1, 2, 3, 4, 6, 7, 8, 9]
print(L2) #[1, 3, 4, 2, 6, 9, 8, 7]


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章