Python基础知识(第三天)
33.可變字符串
可變字符串
在 Python?中,字符串屬于不可變對象,不支持原地修改,如果需要修改其中的值,智能創建新的字符串對象。但是,經常我們確實需要原地修改字符串,可以使用 io.StringIO 對象或 array?模塊。
34.運算符總結_位操作符_優先級問題?
運算符總結
? 左移一位乘以2,右移一位除以2
優先級問題?
乘除優先加減
位運算和算數運算>比較運算符> 賦值運算符
35.列表_特點_內存分析
序列
序列是一種數據存儲方式,用來存儲一系列的數據。在內存中,序列就是一塊用來存放多個值的連續的內存空間。
從圖示中,我們可以看出序列中存儲的是整數對象的地址,而不是整數對象的值。python 中常用的序列結構有:字符串、列表、元組、字典、集合。
列表簡介
列表:用于存儲任意數目、任意類型的數據集合。?
| 方法 | 要點 | 描述 |
| list.append(x) | 增加元素 | 將元素 x 增加到列表 list 尾部 |
| list.extend(aList) | 增加元素 | 將列表 alist 所有元素加到列表 list 尾部 |
| list.insert(index,x) | 增加元素 | 在列表 list 指定位置 index 處插入元素 x |
| list.remove(x) | 刪除元素 | 在列表 list 中刪除首次出現的指定元素 x |
| list.pop([index]) | 刪除元素 | 刪除并返回列表 list 指定為止 index 處的元素,默認是 最后一個元素 |
| list.clear() | 刪除所有元素 | 刪除列表所有元素,并不是刪除列表對象 |
| list.index(x) | 訪問元素 | 返回第一個 x?的索引位置,若不存在 x?元素拋出異常 |
| list.count(x) | 計數 | 返回指定元素 x 在列表 list 中出現的次數 |
| len(list) | 列表長度 | 返回列表中包含元素的個數 |
| list.reverse() | 翻轉列表 | 所有元素原地翻轉 |
| list.sort() | 排序 | 所有元素原地排序 |
| list.copy() | 淺拷貝 | 返回列表對象的淺拷貝 |
Python 的列表大小可變,根據需要隨時增加或縮小。
36.創建列表的4種方式_推導式創建列表
列表的創建
(1)基本語法[]創建
(2)list()創建
(3)range()創建整數列表? ?range都是左閉右開
range()可以幫助我們非常方便的創建整數列表,這在開發中及其有用。語法格式為:range([start,] end [,step])
(4)推導式生成列表
a?= [x*2 for x in?range(5)]
a = [x*2 for x in range(100) if x%9==0]
37.列表_元素的5種添加方式_效率問題
列表元素的增加和刪除? ? ? ?
? ? ? ? 當列表增加和刪除元素時,列表會自動進行內存管理,大大減少了程序員的負擔。但這個特點涉及列表元素的大量移動,效率較低。除非必要,我們一般只在列表的尾部添加元素或刪除元素,這會大大提高列表的操作效率。
(1)append()方法
原地修改列表對象,是真正的列表尾部添加新的元素,速度最快,推薦使用。
(2)+運算符操作
并不是真正的尾部添加元素,而是創建新的列表對象;將原列表的元素和新列表的元素依次復制到新的列表對象中。這樣,會涉及大量的復制操作,對于操作大量元素不建議使用。
(3)extend()方法
將目標列表的所有元素添加到本列表的尾部,屬于原地操作,不創建新的列表對象。
(4)insert()插入元素
使用 insert()方法可以將指定的元素插入到列表對象的任意制定位置。這樣會讓插入位置后面所有的元素進行移動,會影響處理速度。涉及大量元素時,盡量避免使用。類似發生這種移動的函數還有:remove()、pop()、del(),它們在刪除非尾部元素時也會發生操作位置后面元素的移動。
(5)乘法擴展
使用乘法擴展列表,生成一個新列表,新列表元素時原列表元素的多次重復。
38.列表_元素刪除的三種方式_刪除本質是數組元素拷貝
?列表元素的刪除
(1)del刪除
(2)pop()方法
pop()刪除并返回指定位置元素,如果未指定位置則默認操作列表最后一個元素。
(3)remove()方法
刪除首次出現的指定元素,若不存在該元素拋出異常。
39.列表_元素的訪問_元素出現次數統計_成員資格判斷
通過索引直接訪問元素
我們可以通過索引直接訪問元素。索引的區間在[0, 列表長度-1]這個范圍。超過這個范圍則會拋出異常。
index()獲得指定元素在列表中首次出現的索引
index()可以獲取指定元素首次出現的索引位置。語法是:a.index(value,[start,[end]])。
count()獲得指定元素在列表中出現的次數
a.count(20)
len()返回列表長度
len()返回列表長度,即列表中包含元素的個數。
成員資格判斷
我們會使用更加簡潔的 in?關鍵字來判斷,直接返回 True 或 False。
40.列表_切片slice操作
切片操作
切片 slice?操作可以讓我們快速提取子列表或修改。標準格式為: [起始偏移量 start:終止偏移量 end[:步長 step]]? ? ? ?左閉右開
| 操作和說明 | 示例 | 結果 |
| [:] 提取整個列表 | [10,20,30][:] | [10,20,30] |
| [start:] 從 start 索引開始到 結尾 | [10,20,30][1:] | [20,30] |
| [:end]從頭開始知道 end-1 | [10,20,30][:2] | [10,20] |
| [start:end]從start 到end-1 | [10,20,30,40][1:3] | [20,30] |
| [start:end:step] 從 start 提 取到 end-1,步長是 step | [10,20,30,40,50,60,70][1:6: 2] | [20, 40,? |
| 示例 | 說明 | 結果 |
| [10,20,30,40,50,60,70][-3:] | 倒數三個 | [50,60,70] |
| 10,20,30,40,50,60,70][-5:-3] | 倒數第五個到倒數 第三個(包頭不包尾) | [30,40] |
| [10,20,30,40,50,60,70][::-1] | 步長為負,從右到左 反向提取 | [70, 60, 50, 40, 30, 20, 10] |
切片操作時,起始偏移量和終止偏移量不在[0,字符串長度-1]這個范圍,也不會報錯。起始偏移量小于 0 則會當做 0,終止偏移量大于“長度-1”會被當成”長度-1”。
列表的遍歷
for obj in listObj:
print(obj)
復制列表所有的元素到新列表對象
我們可以通過如下簡單方式,實現列表元素內容的復制:
list1?= [30,40,50]
list2 = [] + list1
41.列表_排序_revered逆序_max_min_sum
列表排序(修改原列表,不建新列表的排序)
a.sort()? ? ? ? ? ? ? ? ? ? #默認是升序排列
a.sort(reverse=True)? ? ? ? ? ? ? ? ? ? ? #降序排列
>>> import random? ? ? ? ? ? ? #打亂順序
>>> random.shuffle(a)? ? ? ?
建新列表的排序
>>> a?= sorted(a)? ? ? ? ? ? ? ? ?#默認升序
reversed()返回迭代器
c=reversed(a)
list(c)
只能使用一次
max 和 min
sum
對數值型列表的所有元素進行求和操作,對非數值型列表運算則會報錯。
42.列表_二維列表_表格數據的存儲和讀取
二維列表
a = [? ? ? ?["高小一",18,30000,"北京"],
? ? ? ? ? ? ? ["高小二",19,20000,"上海"],
? ? ? ? ? ? ? ["高小五",20,10000,"深圳"],? ? ? ? ]
a[0][0]
內存結構圖:
?
43.元組_特點_創建的兩種方式_tuple()要點
元組 tuple
列表屬于可變序列,可以任意修改列表中的元素。元組屬于不可變序列,不能修改元組中的 ???元素。因此,元組沒有增加元素、修改元素、刪除元素相關的方法。因此,我們只需要學習元組的創建和刪除,元組中元素的訪問和計數即可。元組支持如下操作:
索引訪問
切片操作
連接操作
成員關系操作
比較運算操作
計數:元組長度 len()、最大值 max()、最小值 min()、求和 sum()等。
元組的創建
(1)通過()創建元組? 小括號可以省略
a?=?(10,20,30) 或者 a =?10,20,30
如果元組只有一個元素,則必須后面加逗號。這是因為解釋器會把(1)解釋為整數 1,(1,) 解釋為元組。
(2)通過 tuple()創建元組
b?= tuple("abc")
b = tuple(range(3))? ? b = tuple([2,3,4])
44.元組_元素訪問_計數方法_切片操作_成員資格判斷_zip()
元組的元素訪問和計數
1.元組的元素不能修改
2.元組的元素訪問和列表一樣,只不過返回的仍然是元組對象。
3.列表關于排序的方法 list.sorted()是修改原列表對象,元組沒有該方法。如果要對元組排序,只能使用內置函數 sorted(tupleObj),并生成新的列表對象。
zip
zip(列表 1,列表 2,...)將多個列表對應位置的元素組合成為元組,并返回這個 zip 對象。
45.元組_生成器推導式創建元組_總結
生成器推導式創建元組
從形式上看,生成器推導式與列表推導式類似,只是生成器推導式使用小括號。列表推導式直接生成列表對象,生成器推導式生成的不是列表也不是元組,而是一個生成器對象。 ???
我們可以通過生成器對象,轉化成列表或者元組。也可以使用生成器對象的?next__()方法進行遍歷,或者直接作為迭代器對象來使用。不管什么方式使用,元素訪問結束后,如果需要重新訪問其中的元素,必須重新創建該生成器對象。
?
元組總結
1.元組的核心特點是:不可變序列。
2.元組的訪問和處理速度比列表快。
3.與整數和字符串一樣,元組可以作為字典的鍵,列表則永遠不能作為字典的鍵使用。
總結
以上是生活随笔為你收集整理的Python基础知识(第三天)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python基础知识(第二天)
- 下一篇: Python基础知识(第四天)