一,字符串補充內容
1,可變字符串:命令:io.StringIO()
用法如下:
>>> import io
>>> s='123'
>>> id(s)
2764112685912
>>> sio=io.StringIO(s)
>>> id(sio)
2764111978568
>>> sio.getvalue()
'123'
>>> sio.seek(2) #指針到2位置
2
>>> sio.write('4')
1
>>> sio.getvalue()
'124'
由代碼可知,該命令是將字符串s轉化爲sio,不產生新的對象。
2,常用運算符與問題
and,or,not | 邏輯運算符與,或,非 |
---|---|
is,is not | 同一性判斷 |
<,<=,>,>=,==!= | 比較操作符,比較值 |
^,I,& | 位操作符,按位異或,或,與 |
<<,>> | 位操作符,左移,右移 |
~ | 位操作符,按位翻轉 |
+,-,*,/,//,%,** | 算數運算符 |
(1)3<a<10,在python中是允許的
(2)位操作
>>> a=0b10010
>>> b=0b11001
>>> c=a|b
>>> c
27
>>> bin(c)
'0b11011'
>>>
可以看到位操作的默認輸出爲十進制,用bin()命令將其轉化爲二進制。
移位操作:
a=8
>>> a<<2
32
(3),運算優先級問題
位運算與算數運算>比較運算>賦值運算>邏輯運算
二,列表
1,列表可以存儲任意類型的數據。
列表的創建:
(1)用[]直接創建
(2)用list()完成創建,該命令可將其他可迭代的數據轉化爲列表。
(3)range(start,end,step)創建一個整數列表,用list()轉化。
注意這裏用,隔開
(4)推導式生成列表
如下:
>>> a=[x*2 for x in range(1,50,2) if x%3==0]
>>> a
[6, 18, 30, 42, 54, 66, 78, 90]
2,列表元素的增加與刪除
(1)儘量減少對列表中間元素進行增加或刪除,因爲涉及大量粘貼,最好在尾部進行
(2)增加元素
append()方法。直接在尾部添加一個元素,不產生新的列表對象
格式如:a.append(20)
+運算符。格式如:a+[50],注意【】不能少,而且會產生新的列表對象。
extend()方法。用於兩個列表相加。格式:a.extend(b),在添加過程中不產生新的對象,且執行完命令後新列表保存在a中
insert()方法.在指定位置插入:
a=[1,2,3]
>>> a.insert(2,1)
>>> a
[1, 2, 1, 3]
同樣結果保存在a中,即不產生新對象
(3)列表元素刪除
del()刪除,不產生新對象
a
[1, 2, 1, 3]
>>> del a[2]
>>> a
[1, 2, 3]
pop方法.不產生新對象,會彈出刪除值
a=[1,2,3,4,5,6]
>>> a.pop()
6
>>> a
[1, 2, 3, 4, 5]
>>> a.pop(2)
3
>>> a
[1, 2, 4, 5]
remove()方法:特殊在於直接以具體值刪除
a
[1, 2, 4, 5]
>>> a.remove(2)
>>> a
[1, 4, 5]
>>>
clear(),刪除所有元素只留空列表
a
[1, 4, 5]
>>> a.clear()
>>> a
(4)列表元素訪問與計數
直接訪問.如a[2]
index().返回首次的索引值.如
a=[1,2,3,3,4,2,1]
>>> a.index(3)
2
a.index(3,3,5)
3
>>>
該方法也可以限定範圍.
count(),計算某元素出現次數.如a.count(3)
len(),計算列表中的元素個數,如len(a)
成員資格判斷:3 in a或者a.count(3)>0
(5)切片操作
同字符串操作,如下:
>>> a=[1,2,3,4,5,6,7,8,'lhy']
>>> a[:]
[1, 2, 3, 4, 5, 6, 7, 8, 'lhy']
>>> a[1:3]
[2, 3]
>>> a[:3]
[1, 2, 3]
>>> a[::-1]
['lhy', 8, 7, 6, 5, 4, 3, 2, 1]
>>> a[5:1:-1]
[6, 5, 4, 3]
>>> a[-3:-5:-1]
[7, 6]
>>>
(6)列表的遍歷
如下:
>>> for i in a:
print(i)
1
2
3
4
5
6
7
8
lhy
>>> a=['123','456','lhy',1]
>>> for i in a:
print(i)
123
456
lhy
1
(7)列表的排序
1 修改原列表,不建立新列表的方法
a.sort()升序
a.sort(reverse=Ture)降序
random.shuffle(a)隨機排列
2 建立新列表的排序
sorted(a)升序
sorted(a,reverse=Ture)降序
(8)reversed()返回迭代器
注意迭代器只能用一次,因爲用過一次後指針已經偏移
> a
['lhy', 1, '456', '123']
>>> c=reversed(a)
>>> c
<list_reverseiterator object at 0x00000207D656BB70>
>>> list(c)
['123', '456', 1, 'lhy']
>>> list(c)
[]
max(a)返回最大值
min(a)返回最小值
sum(a)求和,注意只適用於數字
(8)二維列表:用來存儲二維,表格數據
如:
a=[
['高小一',18,30000,'北京'],
['高小二',18,20000,'上海'],
['高小三',18,10000,'深圳']
]
for m in range(3):
for n in range(4):
print(a[m][n],end='\t')
print()
高小一 18 30000 北京
高小二 18 20000 上海
高小三 18 10000 深圳
>>>
注意,子列表之間有,隔開.索引用a[m][n]的形式
三,元組
1,特點:不可變序列
處理速度比列表快
與整數,字符串一樣,元組可以作爲字典的鍵,而列表不可以.
2,元組的創建
(1)()創建並且()可以省略
注意a=(20)類型爲int
a=(20,)類型爲tuple
(2)tuple()來創建與轉化元組
(3)用del a來刪除一個元組,整個刪除
3,元組元素訪問
(1)a[0]直接訪問
(2)a[1:3]切片訪問
4,對元組排序只能用sorted(a),且最後返回一個列表
如:
a=(3,65,3,4,1,4,6)
>>> sorted(a)
[1, 3, 3, 4, 4, 6, 65]
5,zip將多個列表對應元素組合成元組,返回zip對象
如:
a=[1,2,3]
>>> b=[5,6,7]
>>> zip(a,b)
<zip object at 0x0000020118778E88>
>>> d=zip(a,b)
>>> d
<zip object at 0x0000020118778CC8>
>>> tuple(d)
((1, 5), (2, 6), (3, 7))
>>>
5,可利用生成器推導式創建元組,注意返回的是生成器對象
s=(x*2 for x in range(5))
>>> s
<generator object <genexpr> at 0x000002011874ECA8>
>>> s=[x*2 for x in range(5)]
>>> s
[0, 2, 4, 6, 8]
所以要用list()或tuple()轉化,這是元組與列表在生成器的區別.
也可用s.next()遍歷數據
>>> s=(x*2 for x in range(5))
>>> s
<generator object <genexpr> at 0x000002011874ECA8>
>>> s.__next__()
0
>>> s.__next__()
2
>>> s.__next__()
4
>>> s.__next__()
6
>>> s.__next__()
8
>>> s.__next__()
Traceback (most recent call last):
File "<pyshell#155>", line 1, in <module>
s.__next__()
StopIteration
>>>
可以看到指針一個一個移動,超出範圍就會報錯.