Day02 : 串列、Tuple


串列(list)

  • 串列適合用來追蹤東西的順序,特別是順序與內容可能會改變的時候。
  • 串列與字串不同的地方是,串列是可變的,並且可以隨時加入、刪除或改寫元素。

串列是使用 [] or list() 來建立的

>>> empty_list = list()
>>> empty_list
[]

>>> weekdays = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
>>> weekdays
['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']

利用list()將其他的資料類型轉成串列

  • 將字串轉換成串列
>>> list('cat')
['c', 'a', 't']
  • 將tuple轉換成串列
>>> a_tuple = ('ready', 'fire', 'aim')
>>> list(a_tuple)
['ready', 'fire', 'aim']

利用[位移值]來取得一個項目

>>> example = ['cat', 'dog', 'snake']
>>> example[0]
'cat'
>>> example[1]
'dog'
>>> example[2]
'snake'
>>> example[-1]
'snake'
>>> example[-2]
'dog'
>>> example[-3]
'cat'

tuple

  • tuple跟串列(list)很像,可是,tuple是不可變的,串列是可變的。
>>> tuple1 = 'a', 'b', 'c'
>>> tuple1
('a', 'b', 'c')
>>> tuple1[1] = 'A'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment

定義了tuple之後,就沒辦法隨意更改,其實概念上很像常數串列。

tuple的使用方式

  • 使用()建立空的tuple
>>> empty_tuple = ()
>>> empty_tuple
()
  • 內有一個元素的tuple
>>> example = 'PP',
>>> example
('PP',)

需要注意的是,元素的後面需要加上一個,

  • 內有多個元素的tuple
>>> example = 'Gulu', 'Chico', 'PP'
>>> example
('Gulu', 'Chico', 'PP')

Python在印出tuple時,會自動幫它加上()
真正定義tuple的是元素後面的逗號,但是使用()與否並不會對tuple造成任何不良的影響。

>>> example = ('Gulu', 'Chico', 'PP')
>>> example
('Gulu', 'Chico', 'PP')
  • tuple可以一次被指派給多個變數
>>> example = ('Gulu', 'Chico', 'PP')
>>> a, b, c = example
>>> a
'Gulu'
>>> b
'Chico'
>>> c
'PP'

這個做法有時候也會被稱為tuple開箱(unpacking)

利用tuple()函式將其他東西做成tuple

>>> example_list = ['Gulu', 'Chico', 'PP']
>>> tuple(example_list)
('Gulu', 'Chico', 'PP')

tuple V.S. 串列

tuple通常可以取代list,可是tuple的功能較少。
那tuple跟list到底差在哪裡呢?

  • tuple佔用空間較小(因為元素不可修改,所以結構較簡單,因此資料型態較小)
>>> list1 = list(range(100))
>>> tuple1 = tuple(range(100))
>>> list1.__sizeof__()
984
>>> tuple1.__sizeof__()
824
  • tuple中可包含多個不同型別的物件; list中為多個相同型別的物件。
  • tuple是不可變的(immutable),元素及結構不可被修改; list是可變的(mutable),元素及結構可以被修改。
  • tuple可當成字典鍵(因為不可變)
  • 具名的tuple(Named tuple)可以被當成物件的簡化替代品
  • 函式引數是以tuple的形式傳入

Reference

#Python #初學者







你可能感興趣的文章

[BE101]  PHP 與 MySQL  (語法)

[BE101] PHP 與 MySQL (語法)

筆記:所有的函式都是閉包:談 JS 中的作用域與 Closure

筆記:所有的函式都是閉包:談 JS 中的作用域與 Closure

ASP.NET Core Web API 入門教學 - 同時取得父子資料

ASP.NET Core Web API 入門教學 - 同時取得父子資料






留言討論