文章目錄
列表2、元組、數字
一、列表(list)
1. 運算符
1) 數學運算符:+,*
列表1 + 列表2
產生一個新列表,其中的元素是兩個列表中的元素合併
list1 = [1, 2, 3]
list2 = ['a', 'b']
print(list1 + list2)
# 結果是:[1, 2, 3, 'a', 'b']
列表 * N
產生一個新列表,是原列表的元素重複N次
list1 = [1, 2]
print(list1 * 3)
# 結果是:[1, 2, 1, 2, 1, 2]
2) 比較運算
== , !=
list1 = [1, 2]
list2 = [2, 1]
print(list1==list2) # 結果:False
<, >, <=, >=
從第一個元素開始,按位置比較元素大小,當某一個元素比較出大小時,則那個元素大的所在列表大
list1 = [10, 2, 90, 50]
list2 = [10, 50, 1, 3]
print(list1 > list2)
# 結果是False,因爲第一個元素都是10,一樣,所以比第二對,50>2,所以list2大
is
==是判斷兩個列表的值是否相等;
is則是判斷地址是否相等(內存地址)
list1 = [1, 2]
list2 = [1, 2]
print(list1 == list2)
print(list1 is list2)
# 結果:True,False
ps:如果兩個變量保存相同的數字,則地址一樣
2. in & not in
寫法 | 說明 |
---|---|
元素 in 列表 | 列表中是否存在指定元素 |
元素not in 列表 | 列表中是否不存在制定元素 |
nums = [1, 2, 3]
print(2 in nums)
print(5 not in nums)
# 結果:True,True
3. 相關函數
1) len()
寫法 | 說明 |
---|---|
len(序列) | 獲取序列的長度(元素的個數) |
print(len([1, 2, 3])) # 結果:3
2) max() / min()
寫法 | 說明 |
---|---|
max(序列) | 返回序列中的最大值 |
min | 返回序列中的最小值 |
要求:
a. 序列中所有元素的類型一致(數字可以看成一種類型)
b. 元素本身支持比較大小(如字典不支持比較大小)
print(max([1, 8, 96, 2])) # 結果:96
print(min([1, 8, 96, 2])) # 結果:1
3) sum()
寫法 | 說明 |
---|---|
sum(序列) | 返回序列中的所有元素的和 |
要求:序列中元素必須都是數字
print(sum([1, 2, 3])) # 結果:6
4) list()
寫法 | 說明 |
---|---|
list(序列) | 將指定的序列轉化爲列表 |
ps:可以字符串
print(list('mad')) # 結果:['m', 'a', 'd']
字典是把key取出來,作爲列表的元素
4. 列表其他相關方法
排序相關的高級方法後面再細講,這裏先簡單提一下sort
方法 | 說明 |
---|---|
list.count(元素) | 統計列表中,指定元素的個數 若元素不存在,則返回0 |
list.extend(序列) | 將序列中的元素全部添加到列表末尾 若是字符串,則當作序列添加,即每一個字符當作一個元素添加 ’abc’ -> ‘a’, ‘b’, ‘c’ |
list.index(元素) | 獲取指定元素在列表中的下標 若元素不存在,報ValueError 若元素有多個,返回第一個的下標 |
list.reverse() | 將原來的列表倒序 |
list.clear() | 清空列表 |
list.copy() | 返回一個列表的淺複製(產生新列表) |
list.sort() | 將列表中的元素從小到大排序 直接修改原列表,不會產生新列表 |
list.sort(reverse=True) | 從大到小排序 |
ps1:排序函數
寫法 | 說明 |
---|---|
sorted(序列) | 不修改原序列,排序後產生新列表 |
sorted(序列, reverse=True) | 從大到小 |
reversed(序列) | 返回一個逆序的迭代器 |
ps2:遍歷刪除
遍歷列表刪除指定元素時,遍歷的列表最好爲列表的淺複製,因爲如果直接遍歷原列表,當原列表的元素個數改變時,遍歷會漏遍歷部分元素
二、元組(tuple)
元組就是不可改變的列表
容器型數據類型,將()作爲容器的標誌,元素用逗號隔開
不可變(只能重新賦值),有序(支持下標操作)
切片、遍歷、查等操作和列表一樣
相關運算與列表也一樣
元組特有或者頻繁使用的操作
1) 單個元素的元組
tuple1 = (123, ) # 這裏的逗號不能省!
2) 單獨使用的元組的值,()可以省略
即:多個數據用逗號隔開,還是元組
tuple2 = (10, 20, 30)
tuple3 = 20, 30, 40
3) 可以通過讓變量的個數與元組中元素的個數保持一致來分別獲取元組中的元素
變量1, 變量2, 變量3 = 元組
4) 同時聲名多個變量,獲取序列中的元素時變量的個數可以比元組少,但是多個變量中的某一個變量的簽名必須加*;帶*的變量可以獲取不帶*的變量獲取完剩下的部分
tuple1 = (1, 2, 3, 4, 5, 6, 7)
x1, *x2, x3 = tuple1
print(x1, x2, x3)
# 結果是:
# 1 [2, 3, 4, 5, 6] 7
三、數字
整型(int), 浮點型(float), 布爾值(bool), 複數(complex)
1. 整型(int)
所有整數對應的類型
ps:python2中,整型除了int還有long
支持二進制、八進制、十六進制的表示方式
2. 浮點型(float)
所有帶小數點的書對應的類型
支持科學計數法
3. 布爾(bool)
只有True和False,也是數字類型
True本質就是1,False本質就是0:
print(True + 2) # 結果是3
10/False # ZeroDivisionError 說明零作除數了
4. 複數(complex)
由實部和虛部組成,實部 + 虛部 j
python直接支持複數運算
如果虛部是1,這個1不能省
c1 = 10 + 2j
c2 = 5 - 3j
print(c1 + c2) # 結果:(15 - 1j)
print(c1 - c2) # 結果:(5 + 5j)
print(c1 * c2) # 結果:(56 - 20j)
5. 數字類型轉換
int(數據)
所有浮點數(直接保留整數部分)、布爾、字符串
ps:字符串去掉引號之後必須是整數才能轉
float(數據)
所有的整數、布爾 (相當於直接加.0)、字符串
ps:字符串去掉引號之後必須是數字才能轉
bool(數據)
所有數據都能轉布爾
所有爲零爲空的數據會轉換爲False,其他都是True
print(bool(0))
print(bool(0.0))
print(bool(''))
print(bool([]))
print(bool(()))
print(bool(None))
# 結果:全是False
complex(數據)
略
6. 數學模塊
math
cmath - 和複數計算相關的數學模塊
作業
"""1. list.reverse的實現"""
def reverse_list_without_reverse(list1):
"""不用reverse方法來倒序列表"""
for i in range(int(len(list1) / 2)):
list1[i], list1[-i - 1] = list1[-i - 1], list1[i]
return list1
"""2. list.sort的實現"""
def sort_list_without_sort(list1, reverse=False):
"""不用sort方法來排序列表元素"""
# 帶判斷逆序的冒泡排序
for i in range(len(list1)):
for j in range(len(list1) - i - 1):
if reverse:
if list1[j] < list1[j + 1]:
list1[j], list1[j + 1] = list1[j + 1], list1[j]
else:
if list1[j] > list1[j+1]:
list1[j], list1[j+1] = list1[j+1], list1[j]
return list1
作業解答from老師
print('================第1題==================')
# 1.實現count的功能
names = ['曹操', '劉備', '司馬懿', '呂布', '曹操']
name = '曹操'
count = 0
for x in names:
if x == name:
count += 1
print(count)
print('================第2題==================')
# 2.列表.extend(序列) - 將序列中的元素全部添加的列表中
names = ['曹操', '劉備', '司馬懿', '呂布', '曹操']
# seq = 'hello'
# seq = [10, 20]
seq = (1, 200)
for x in seq:
names.append(x)
print(names)
print('================第3題==================')
# 3.列表.index(元素) -> 獲取指定元素在列表中的下標
names = ['曹操', '劉備', '司馬懿', '呂布', '曹操']
item = '小喬'
for index in range(len(names)):
if names[index] == item:
print(index)
break
else:
# raise ValueError
print('列表中沒有該元素!')
print('================第4題==================')
# 4.列表.reverse() - 將原來的序列倒序過來(反過來)
# nums = [10, 20, 3, 40, 50] # 5
# 0, 4; 1, 3 range(len//2)
# nums = [10, 20, 3, 40, 50, 4, 89] # 7
# 0, 6; 1,5; 2,4
nums = [10, 20, 3, 40, 50, 4] # 6
# 0, 5; 1, 4; 2, 3;
length = len(nums)
for x in range(length//2):
y = length - 1 - x
nums[x], nums[y] = nums[y], nums[x]
print(nums)