python中的列表操作

starkbl發表於2021-09-09

列表:(list)
容器型別:某個物件包含對其它物件的引用,則將其稱為容器。
列表可以包含任何種類的物件(數字、字串、甚至巢狀其他列表,可以巢狀元組)
內部包含:任意物件的有序集合,透過索引訪問其中的元素,可變物件,支援異構(包含多種不同的元素),任意巢狀

 支援在原處修改:        列表的可變表現為:其內部的每一個元素,儲存在列表中不是物件本身,而是物件的引用,其修改其實是修改的引用,而不是真正的修改了內部的某個物件。                使用[]建立列表

>> list1 = ["This","is","a","pig"]
>> print list1[0]
This
>> print list1[0][0]
T

列表和元組並不真正儲存資料而是存放的物件引用!

解釋:
["this","is","a","pig"]
這裡並不是存放了"this",而是在記憶體中找個了地方存放的"this",只是把"this"的儲存的位置存放在這個列表當中。

---列表的異構:

In [2]: list = [1,'b']

In [3]: print list
[1, 'b']

---巢狀的列表:

In [6]: list2 = [[1,2],['a','b']]

In [7]: print list2              
[[1, 2], ['a', 'b']]

---列表的修改

In [11]: list2 = [1,2,3,4,5]

In [12]: print list2        
[1, 2, 3, 4, 5]

In [13]: list2[1] = 888

In [14]: print list2
[1, 888, 3, 4, 5]

---刪除指定的元素

In [15]: list2
Out[15]: [1, 888, 3, 4, 5]

In [16]: del(list2[1:])

In [17]: print list2
[1]

---新增一個元素(append方法) 在最後指定附件元素
In [19]: list2 = [1,2,3,4]

In [20]: print list2
[1, 2, 3, 4]

In [21]: list2.append(5)

In [22]: print list2
[1, 2, 3, 4, 5]

能不能附加多個元素?附加一個列表進來

In [30]: print list2
[1, 2, 3, 4, 5]

In [31]: list3 = ['x','y','z']

In [32]: list2.append(list3)

In [33]: print list2
[1, 2, 3, 4, 5, ['x', 'y', 'z']]

注意:這裡是把這個列表當作一個元素附加進來的。

---extend 方法
extend list by appending elements from the iterable
透過附加迭代元素來擴充套件列表

In [37]: list1 = [1,2,3,4]

In [38]: list2 = ['x','y','z']

In [39]: list1.extend(list2)

In [40]: print list1
[1, 2, 3, 4, 'x', 'y', 'z']

是把兩個列表合併在一起了

---index方法(返回字元,第一次出現的索引編號)

In [45]: list1 = [1,2,1,3,3,2]

In [46]: list1.index(2)
Out[46]: 1

--- insert 方法(在指定的元素前面新增元素)

In [49]: list = [1,2,3,4,5]

In [50]: list.insert(2,'xyz')

In [51]: print list
[1, 2, 'xyz', 3, 4, 5]

---pop方法(彈出列表中的元素,預設是最後一個元素,按照索引刪除,而remove是按照值刪除的)
In [57]: list
Out[57]: [1, 2, 'xyz', 3, 4]

In [58]: list.pop()
Out[58]: 4

In [59]: list.pop()
Out[59]: 3

In [60]: list
Out[60]: [1, 2, 'xyz']

----remove 方法 (刪除列表中指定的元素,安裝值來刪除)

In [62]: list = [1,2,3,4,5]

In [63]: list.remove(3)

In [64]: print list
[1, 2, 4, 5]

* 列表相加會有什麼效果呢? ***
list1 + list2:合併兩個列表,生產一個新列表,原列表不會改變
list1 * N :重複list1 N次,生產新列表

>> list1 = [1,2,3]
>> list2 = ['x','y','z']
>> list1 + list2
[1, 2, 3, 'x', 'y', 'z']          ----> 返回了新的列表
>> print list1
[1, 2, 3]
>> print list2
['x', 'y', 'z']

>> list1
[1, 2, 3]
>> list1 * 3
[1, 2, 3, 1, 2, 3, 1, 2, 3]

in 運算子:成員關係判斷符
判斷一個元素,是不是在一個列表當中,在返回true,否則返回false  用法:item in container

not in  也類似

>> list1
[1, 2, 3]
>> 2 in list1
True
>> 'x' in list1
False

在切片級別的修改替換的是元素

>> list1
[1, 2, 3]
>> list1[1:]
[2, 3]
>> list1[1:] = ['x','y','z']
>> list1
[1, 'x', 'y', 'z']

***** 列表的複製 ****
(1)輕度copy

>> list1 = [1,2,3]
>> list2 = list1
>> list1.append(4)
>> print list1
[1, 2, 3, 4]
>> print list2
[1, 2, 3, 4]

為什麼會出現這種情況?
因為它們指向了同一個記憶體物件,不是真正執行了複製

>> id(list1)
140325613007360
>> id(list2)
140325613007360
>>

(2)  使用list[:] 方式複製列表

>> list1 = [1,2,3,4]
>> list3 = list1[:]
>> print list3
[1, 2, 3, 4]
>> list1.append(5)
>> print list1
[1, 2, 3, 4, 5]
>> print list3
[1, 2, 3, 4]
>> id(list1)
140325612904744
>> id(list3)
140325613007648

(3)透過內建庫copy複製列表
import copy
copy.deepcopy
Deep copy operation on arbitrary Python objects.
對任意Python物件進行深度複製操作。

>> list1
[1, 2, 3, 4, 5]
>> import copy
>> list1
[1, 2, 3, 4, 5]
>> id(list1)
140325612904744
>> list2 = copy.deepcopy(list1)
>> print list2
[1, 2, 3, 4, 5]
>> id(list2)
140325613030936

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/3705/viewspace-2802639/,如需轉載,請註明出處,否則將追究法律責任。

相關文章