01-Python 中的數據類型-03-列表,range

總體 要講的大綱內容 如下

  • 數字類型- int float complex

  • 字符串類型 Text Sequence Type- str

  • 序列類型 - list tuple range

  • 集合類型 - set frozenset

  • 上下文管理器類型 - 比較複雜暫時 不用掌握

  • 二進制序列類型 bytes bytesarray memoryview

  • 真值檢測

  • 比較運算符

  • 邏輯運算符

  • 如何判斷 一個對象 是什麼類型- type(xxx)


今天 繼續講 基礎類型,這篇內容還是偏多的,我準備給大家介紹python 最常用的幾種 數據類型。

希望可以好好 敲敲代碼,隨後代碼的量 也會偏多,所以要跟上練習纔行哦。咱們直接進入正題

列表 list

首先明白 什麼list , 爲啥會有list ?

還記得之前 我們學習str 類型的時候 通過 str.split 方法生成了一個list 類型嗎?

>>> numbs = 'one,two,three,four'.split(',')
>>> type(numbs)
<class 'list'>
>>> numbs
['one', 'two', 'three', 'four']

​ list 中可以存放 一系列的元素,這裏可以是 str 類型,也可以是其他任何你想放入的類型都是可以的。 list 你可以認爲 他是一個有位置的盒子,盒子裏面已經有相應的序號,來存放一些任何你想放入的元素。list 會記錄這些元素的順序 。 list中每個元素都會有 ‘位置’ 的概念 。

有幾點 要說明:

  • list 中每個元素都是有自己的位置信息的。
  • list 中的每個元素 可以是不同的類型,比如 int ,float ,str ,list .
  • list 中 的元素是可以修改的 ,也是說list 中的元素可以被 改變值的.
  • list 中沒有一個元素 也是可以的, 這個時候 是 空list .

讓我們來感受如何創建一個list

創建一個 空的list , 以及創建一個 有元素的list ,list 也可以通過 len 的方式獲取list 中的元素個數

>>> nums = []
>>> type(nums)
<class 'list'>

>>> nums =[1,2,3,4,5]
>>> type(nums)
<class 'list'>
>>> # 可以存放不同的數據類型 
>>> boxes =[1,2,'frank',bytes('aaa',encoding='utf8')]

>>> boxes
[1, 2, 'frank', b'aaa']
>>> type(boxes)
<class 'list'>

獲取list 的元素個數

>>> nums = []
>>> len(nums)
0
>>> nums2 =[1,2,3,4,5]
>>> len(nums2)
5

list中比遍歷元素

如何 訪問 列表中的每一個元素呢?

nums = ['one', 'two', 'three', 'four', 'five', 'six']

for num in nums:
   print(num)

"""結果如下
one
two
three
four
five
six
"""

這裏 for 語句 可以遍歷list 語法就像上面的列子,

還有 nums 後面 還一個冒號的東東。

for num in nums:
    pass
    print(nums)

其中 num 就是將要訪問的元素, 第二行print ,前面留出4個空格.

list-img-03

你可能會有疑問? 爲啥要留出空格呢? 空格的作用是什麼?

其實 遍歷這個過程 其實需要6次訪問 這個列表,每一次從列表中拿出一個元素,然後再拿下一個元素 。

首先計算機執行代碼 ,一般都是從上到下 依次 執行 (一般情況),計算機 要知道 你的下一行代碼 是在for 循環裏面,還是 在for語句的下面。


nums = ['one', 'two', 'three', 'four', 'five', 'six']

for num in nums:
    print(num)
    print('aaa')
    
print('hello world')

有了縮進 計算機 就知道 ,print(‘aaa’) 和print(‘hello world’) 是在不同的代碼段,就能區分開來 。

hello world 這一行 就會 在 nums 被訪問完之後 才執行 。

我這樣講 不知道有沒有理解 。 通過縮進,計算機 就可以知道哪一塊代碼在一個層級。

>>> for i in [1,2,3]:
...     print(i)
...     print('hahaha')
... print('for finished')
1
hahaha
2
hahaha
3
hahaha
for finished

好現在,現在接觸了一個python 語法 for 語句,還記得字符串類型嗎? 這種類型也可以用for 語句哦。

>>> name = 'frank'
>>> for char in name:
...     print(char)
...     
f
r
a
n
k

其實在python 很多東西都可以for 的。 以後再慢慢聊 。

這裏可以先告訴你 只要是可迭代的對象 都是可以用 for 的

list 中的 位置概念

比如list 中有一些數字。 nums 裏面 1 到8 ,這裏 我用了一個range 來生成了一組數字

>>> nums =list(range(1,9))
>>> nums
[1, 2, 3, 4, 5, 6, 7, 8]

這個時候 計算機 已經知道每個數字的位置 。舉個例子 計算機 知道0 號’位置’ 是數字1 , 3號’位置’ 是數字4

8號’位置’ 不存在 。

在計算機 ,更準確的說法 叫索引 index, 並且是從零開始的,不是從1開始的。

>>> nums[0]
1
>>> nums[3]
4
>>> nums[7]
8
>>> nums[8]
Traceback (most recent call last):
  File "<input>", line 1, in <module>
IndexError: list index out of range

好,下面正式介紹一下 索引,在 list 中 有兩種索引 一種叫做 正數索引,即從0開始 一直加1 到最後一個元素。

還有一種索引 是負數索引,從最後一個位置 爲-1,從右向左 一次減1 ,直到第一個元素 。看下面 的圖形。

第一行就是正數索引,第二行 就是負數索引。

這樣的話,我們就可以通過索引訪問 對應位置的元素。

img-list-04

來看下負數索引,-1位置 對應的值爲8 , -2 位置對應的7, -8 位置對應的值 1。

就是說 我們有一種索引 來訪問同一個元素 。 就這個例子而言 位置 5 和 位置-3 是同一個元素, 位置0 和-8 是同一個元素

>>> nums
[1, 2, 3, 4, 5, 6, 7, 8]
>>> nums[-1]
8
>>> nums[-2]
7
>>> nums[-9]
Traceback (most recent call last):
  File "<input>", line 1, in <module>
IndexError: list index out of range
>>> nums[-7]
2
>>> nums[-8]
1
>>> nums[5]
6
>>> nums[-3]
6

list 中 切片概念引入

什麼是切片呢? 就是 可以切一段數據的東西。 比如還是nums 我想獲取 2-5 這一段的數字的list

>>> nums= [1, 2, 3, 4, 5, 6, 7, 8]
>>> nums
[1, 2, 3, 4, 5, 6, 7, 8]

>>> nums[1:5]
[2, 3, 4, 5]

>>> nums[0:2]
[1, 2]

你發現什麼規律了嗎?

nums[a:b] 是獲取 a<= i<b 這一段索引的數據。左閉右開的區間。 當然也可以用負數索引


>>> nums
[1, 2, 3, 4, 5, 6, 7, 8]

>>> nums[-6:-3]
[3, 4, 5]

>>> nums[1:4]
[2, 3, 4]

list 中添加元素

append 每次 在最後添加一個元素

insert 兩種方式 可以指定要插入的位置 。insert(i, 元素), 元素插入到i 位置,

如果你插入的位置 沒有的話, 默認 會放在最後的位置插入這個元素

>>> fruits = []
>>> fruits.append('apple')
>>> fruits
['apple']
>>> fruits.append('orange')
>>> fruits
['apple', 'orange']
>>> fruits.append('banana')
>>> fruits
['apple', 'orange', 'banana']

>>> # 將zero 插入到 0號位置 
>>> fruits.insert(0,'zero')
>>> fruits
['zero', 'apple', 'orange', 'banana']
>>> fruits.insert(3,'three')
>>> fruits
['zero', 'apple', 'orange', 'three', 'banana']


>>> ## 
>>> fruits=['zero', 'apple', 'orange']
>>> len(fruits)
3
>>> fruits.insert(10,'AAA')
>>> fruits
['zero', 'apple', 'orange', 'AAA']

list 中刪除元素

del list[i] 刪除 索引爲 i的元素。 如果沒有這個索引,會報錯的 IndexError。

pop(index) 刪除一個元素,可以指定一個索引位置刪除 如果沒有指定就刪除最後一個,並且 最後返回這個刪除的元素,

如果是一個 空的列表 那麼 會拋出一個 IndexError .

remove (元素) 刪除一個元素,如果這個元素不在list,中會報錯的, ValueError

>>> fruits= ['zero', 'apple', 'orange', 'AAA'] 
>>> fruits.pop()
'AAA'
>>> fruits
['zero', 'apple', 'orange']
>>> fruits.pop()
'orange'
>>> fruits
['zero', 'apple']
>>> fruits.pop()
'apple'
>>> fruits
['zero']
>>> fruits.pop()
'zero'
>>> fruits
[]
>>> fruits.pop()
Traceback (most recent call last):
  File "<input>", line 1, in <module>
IndexError: pop from empty list

    
>>> fruits= ['zero', 'apple', 'orange', 'AAA'] 
>>> fruits.pop(1)
'apple'
>>> fruits
['zero', 'orange', 'AAA']
    

remove

>>> 
>>> fruits= ['zero', 'apple', 'orange', 'AAA'] 
>>> fruits.remove(1)
Traceback (most recent call last):
  File "<input>", line 1, in <module>
ValueError: list.remove(x): x not in list
>>> fruits.remove('orange')
>>> fruits
['zero', 'apple', 'AAA']

del 刪除元素

>>> fruits= ['zero', 'apple', 'orange']
>>> del fruits[1]
>>> fruits
['zero', 'orange']

list 中修改元素 或者 替換

直接 通過 索引 獲取那個元素 進行復制就可以了。

>>> fruits = ['apple', 'orange', 'banana']
>>> fruits[0]='pear'
>>> fruits
['pear', 'orange', 'banana']

list 中 清空 列表

clear

>>> fruits = ['apple', 'orange', 'banana']

>>> fruits.clear()
>>> fruits
[]

list 中常用方法介紹

排序 sort

默認是升序 ,也可以降序 ,指定 reverse 參數 即可 , list.sort(reverse=True) , 注意這裏也是原地排序,直接改變list中的元素位置。

>>> nums= [3, 5, 2, 0, 8, 1, 4, 6, 7]
>>> nums.sort()

>>> nums
[0, 1, 2, 3, 4, 5, 6, 7, 8]

翻轉 reverse

原地翻轉 list 的元素 。

>>> nums = [1,2,3,4]
>>> nums.reverse()
>>> nums
[4, 3, 2, 1]

合併兩個列表 extend

有兩個列表 ,希望另一個列表的內容 放到自己的列表中,可以用 extend

這個方法 和 append 是有區別的。

>>> nums = [1,2,3]
>>> nums2 = [7,8,9]
>>> nums.extend(nums2)
>>> nums
[1, 2, 3, 7, 8, 9]

append 會把 另一個元素 作爲一個元素,放在 列表的最後一個位置。

>>> nums = [1,2,3]
... nums2 = [7,8,9]
>>> 
>>> nums.append(nums2)
>>> nums
[1, 2, 3, [7, 8, 9]]

copy 一個列表

這裏 用的拷貝 是一個淺拷貝 ,你可能 不能理解,什麼叫淺拷貝 ,什麼叫深拷貝 。 有時間 我在仔細說下這個問題 。

>>> nums = [1,2,3]
>>> nums.copy()
[1, 2, 3]
>>> nums2=nums.copy()
>>> nums2
[1, 2, 3]

如何查看 兩個列表是不是同一個呢? 在python中 可以用 id() ,來查看這個內存地址 。

內存地址 ,就是計算機所有的代碼能夠運行,就是因爲 代碼都會跑到內存裏面,同時內存 是有一個地址標識的,這樣計算機 才能找到這個 變量。

來看下例子

>>> nums
[1, 2, 3]

>>> nums2=nums.copy()
>>> nums3 = nums

>>> id(nums),id(nums3),id(nums2)
(2029581317256, 2029581317256, 2029581788168)

從上面的結果 nums3 和nums 的id 值 是一樣的,說明這兩個 是同一個列表, 而通過copy 的nums2 的id 值 則和他們不一樣 ,說明 nums2 和他們不一樣的。

range 對象

​ 用range 可以方便 快速的構造一組數。 python3中 range 的返回值是一個對象,並且這個對象可以迭代, 簡單來說 就是可以for

range 非常方便的生成一組數據。 range 返回的是一個對象。需要用 list 方法變成一個列表。

range(start, stop[, step]) 有三個參數

​ start 開始的數(包含), 默認值是 0

​ stop 結束的數 (不包含)

​ step 步長 默認值 爲1

>>> r = range(5)
>>> type(r)
<class 'range'>


>>> list(range(5))
[0, 1, 2, 3, 4]
>>> list(range(7))
[0, 1, 2, 3, 4, 5, 6]

指定start 值

>>> list(range(2,6))
[2, 3, 4, 5]
>>> list(range(3,8))
[3, 4, 5, 6, 7]

指定步長

>>> list(range(1,9,2))
[1, 3, 5, 7]
>>> list(range(1,9,3))
[1, 4, 7]
			

總結

​ 今天 主要講了 python 中的兩種類型 list, 和range 這個這些基本的用法,可能有點多,之後要好好看下。

然後 學到了一個語法 for 的簡單使用 可以遍歷list . 加油!

參考文檔

list doc

分享快樂,留住感動. 2020-03-19 22:57:24 --frank
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章