目錄標題
總體 要講的大綱內容 如下
-
數字類型- int float complex
-
字符串類型 Text Sequence Type- str
-
序列類型 - list tuple range
-
上下文管理器類型 - 比較複雜暫時 不用掌握
-
二進制序列類型 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個空格.
你可能會有疑問? 爲啥要留出空格呢? 空格的作用是什麼?
其實 遍歷這個過程 其實需要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 ,直到第一個元素 。看下面 的圖形。
第一行就是正數索引,第二行 就是負數索引。
這樣的話,我們就可以通過索引訪問 對應位置的元素。
來看下負數索引,-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 . 加油!