1、序列
序列就是用於存放多個值的連續的空間,且具有順序關係。
python中序列結構主要包括列表、元素、集合和字典。
1.1索引(indexing)
索引是從0開始計算
在python中索引也可以是負數,從右向左計數,最右邊的數是的索引爲-1(也就是最後一個數的下標可以是-1).
如
a = ["你","好","啊","嗎"]
print( a[0] )
print(a[-4])
print("--------分割線--------")
print(a[1])
print(a[-3])
print("--------分割線--------")
print(a[2])
print(a[-2])
print("--------分割線--------")
print(a[3])
print(a[-1])
輸出
你
你
--------分割線--------
好
好
--------分割線--------
啊
啊
--------分割線--------
嗎
嗎
1.2、切片(Slicing)
切片操作是訪問序列中的元素的另一種方法
語法格式:
sname[start : end : step]
說明:
1、sname:序列的名字
2、start:切片的起始位置(包括該位置),如果不指定,默認爲0
3、end:切片的截止位置(不包括該位置),如果不知道,默認爲序列的長度
4、step: 切片的步長,如果省略(省略時可以連最後一個冒號也一起省略),默認爲1。
如:
animal = ["小馬", "小牛", "小羊", "小狗", "小猴", "小貓", "小蛇", "小虎", "小兔"]
print(animal[1:5])
print(animal[2:5:2])
輸出
['小牛', '小羊', '小狗', '小猴']
['小羊', '小猴']
技巧:如果需要複製一整個序列,可以將start,end都有省略,但是中間的冒號要保留。如
animal[ : ]
1.3、序列相加與相乘
1、序列相加
可以將2個同類型(同爲列表、元組、字典等,序列裏的元素類型可以不同)的序列進行相加操作(使用+號進行),其實就是拼接2個序列
2、序列相乘
一個序列乘以數字n,那麼就將序列重複n次成爲新的序列。
如
animal = ["小馬", "小牛", "小羊"]
print(animal * 3)
輸出
['小馬', '小牛', '小羊', '小馬', '小牛', '小羊', '小馬', '小牛', '小羊']
如果只是爲了初始化指定列表長度的功能,那麼可以採取以下方式
如
a = [None] * 5
print(a)
輸出
[None, None, None, None, None]
1.4、檢查某個元素是否是序列的成員(元素)
可以使用in關鍵字來檢查
語法格式:
value in sequence
例子
animal = ["小馬", "小牛", "小羊"]
print("小馬" in animal)
print("xiaoma" in animal)
print("xiaoma" not in animal)
輸出
True
False
True
1.5、計算序列的長度、最大值和最小值
計算序列的長度使用內置函數len()、最大值使用內置函數max()和最小值使用內置函數min()
如:
a = ["1", "5", "2"]
print("a序列的長度", len(a))
print("a序列的最大元素", max(a))
print("a序列的最小元素", min(a))
輸出
a序列的長度 3
a序列的最大元素 5
a序列的最小元素 1
python中的其他內置函數及其作用
函數 | 作用 |
---|---|
list() | 將序列轉化爲列表 |
str | 將序列轉化爲字符串 |
sum() | 計算元素和 |
sorted | 對元素進行排序 |
reversed() | 反向序列元素 |
enumerate() | 將序列組合爲一個索引序列,多用在for循環中 |
如
a = ["1", "5", "2"]
print("[1,2,3]序列的元素和", sum([1,2,3]))
print("正序", sorted(a, reverse=True))
print("逆序", sorted(a, reverse=False))
2、列表(list)
python中的列表是非常靈活的,列表裏的元素內容可以不同,因爲他們之間沒有任何關係,但是通常情況下我們在一個列表裏只放一種數據類型,爲得是增加數據的可讀性
2.1、創建與刪除列表
1、使用賦值運算符直接創建列表
語法格式如下:
listname = [element 1, element 2, ......, element n]
2、創建空列表
語法如下:
emptylist = []
3、創建數值列表
可以使用list()函數直接將range()函數循環出口的結果直接轉換爲列表
語法如下:(其中data的類型可以是range對象、字符串、元組或者其他可以迭代類型的數據)
list(data)
例子:
print(list(range(10)))
輸出
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
4、刪除列表
語法格式:
del listname
值得注意的是在python中有自帶的垃圾回收機制會自動銷燬不用的列表,故該語句我們比較少用。
2.2、訪問列表元素
輸出列表或者列表的某個元素的語法格式:
print(listname)或者print(listname[n])
2.3、遍歷列表
遍歷列表的方法很多,這邊介紹2種最常用的
1、使用for循環
語法格式:
for item in listname:
# 輸出item
例子:
fruit = ['apple', 'banana', 'orange', 'pear', 'watermelon']
for i in fruit:
print(i)
輸出
apple
banana
orange
pear
watermelon
2、使用for循環和enumerate()函數實現
使用for循環和enumerate()函數實現輸出索引和元素
語法格式:
for index, item in enumerate(listname):
例子
fruit = ['apple', 'banana', 'orange', 'pear', 'watermelon']
for index,i in enumerate(fruit):
print(index, i)
輸出
0 apple
1 banana
2 orange
3 pear
4 watermelon
2.4、添加、刪除、修改列表元素
1、添加元素
語法格式如下:
listname.append(obj) #速度快,常用
或者
使用+號, #速度太慢
或者
insert()函數 #效率低,不推薦
例子:
fruit = ['apple', 'banana', 'orange', 'pear', 'watermelon']
print("水果的種類有" + str(len(fruit)) + '種')
fruit.append("grape")
print("水果的種類有"+ str(len(fruit)) + '種')
輸出
水果的種類有5種
水果的種類有6種
如果要將一個列表裏的元素全部添加到另一個列表
可以使用下面語句:
listname.extend(seq) #seq爲要添加進去的列表
2、修改元素
直接舉例子說明
fruit = ['apple', 'banana', 'orange', 'pear', 'watermelon']
print(fruit)
fruit[2] = 'strawberry'
print(fruit)
輸出
['apple', 'banana', 'orange', 'pear', 'watermelon']
['apple', 'banana', 'strawberry', 'pear', 'watermelon']
3、刪除元素
(1)、根據索引刪除
如:
fruit = ['apple', 'banana', 'orange', 'pear', 'watermelon']
del fruit[1]
print(fruit)
輸出
['apple', 'orange', 'pear', 'watermelon']
(2)、根據元素值刪除
如:
fruit = ['apple', 'banana', 'orange', 'pear', 'watermelon']
value = "apple"
if fruit.count(value) > 0: # 判斷元素是否存在防止報錯
fruit.remove(value)
print(fruit)
輸出
['banana', 'orange', 'pear', 'watermelon']
2.5、對列表進行統計計算
1、獲取指定元素出現的次數
使用count()函數
語法格式:
listname.count(obj)
2、獲取指定元素首次出現的下標
使用index()函數
語法格式:
listname.index(obj)
3、統計數值列表的元素和
使用sum()函數
sum(iterable[,strart]) #iterable爲要統計的列表名
2.6、對列表進行排序
1、使用sort函數進行排序
語法格式:
listname.sort(key=None,reverse=False)
參數說明,key是指定一個比較鍵,如當key=str.lower時,不區分大小寫。
reverse=False時爲降序,爲True時爲升序,默認爲升序。
注意sort()函數對字符串進行排序時,先對大寫字母進行排序,然後對小寫字母進行排序。且對中文排序時,容易出錯
如
fruit = ['Apple', 'banana', 'Orange', 'pear', 'watermelon']
print('-------區分大小寫-------')
fruit.sort()
print(fruit)
print('-------不區分大小寫-------')
fruit.sort(key=str.lower)
print(fruit)
輸出
-------區分大小寫-------
['Apple', 'Orange', 'banana', 'pear', 'watermelon']
-------不區分大小寫-------
['Apple', 'banana', 'Orange', 'pear', 'watermelon']
2、使用sorted()函數進行排序
作用與sort()基本一樣,但是sorted()不會改變原列表的順序,sort()會。
語法格式:
sorted(iterable, key=None,reverse=False) #iterable爲要排序的列表
如
fruit = ['Apple', 'banana', 'Orange', 'pear', 'watermelon']
fruit_a = sorted(fruit)
print("原列表順序不變", fruit)
print(fruit_a)
輸出
原列表順序不變 ['Apple', 'banana', 'Orange', 'pear', 'watermelon']
['Apple', 'Orange', 'banana', 'pear', 'watermelon']
2.7、列表推導式
使用列表推導式可以快速生成一個列表,或讓摸個列表生成滿足指定需求的列表。
有以下幾種常用方法
1、生成指定範圍的數值列表
語法格式:
list = [Expression for var in range]
參數說明:list生成的列表名,Expression表達式用於計算新列表的元素
var循環變量,range採用range()生成的range對象
如生產10個隨機數,範圍在10到100之間
import random
randomnumber = [random.randint(10,100) for i in range(10)]
print(randomnumber)
輸出
[65, 50, 57, 84, 56, 30, 27, 47, 98, 79]
2、根據列表生成指定需求的列表
語法格式:
newlist = [Expression for var in list]
如
import random
price = [100, 200, 300] # 商品價格
sale = [int(i*0.5) for i in price] # 打五折後的價格
print(sale)
輸出
[50, 100, 150]
3、從列表中選擇符合條件的元素組成新的列表
語法格式:
newlist = [Expression for var in list if condition]
如
import random
price = [100, 200, 300] # 商品價格
sale = [i for i in price if i > 200] # 價格大於200的商品價格
print(sale)
輸出
[300]
3、元組
元組簡單說就是不可變的列表(不可變序),用於保存不可修改的內容。
3.1、元組的創建與刪除
1、用賦值運算符直接創建元組
語法格式(括號可以省略)
tuplename = (element 1,element 2,...element n)
如果創建的元組只有一個符號時,需要在元素的後面加個逗號
如:
a = ("a",) # 元組
a = ("a") # 字符串
2、創建空元組
語法格式
emptytuple = ()
3、創建數值元組
語法格式
tuple(data)
如
print(tuple(range(0, 10, 3)))
輸出
(0, 3, 6, 9)
4、刪除元組
語法格式
del tuplename
3.2、訪問元組元素
print直接打印元組
語法格式
print(tuplename) #打印整個元組
print(tuplename[n]) #打印單個元組元素
print(tuplement[x:y]) #打印多個元素
當然也可以使用for循環來遍歷,語法格式與列表一樣
3.3、修改元組元素
修改元組裏的單個元素的內容,是不支持的
如
a = (1,2,3)
a[1]= "a"
print(a)
報錯
TypeError: 'tuple' object does not support item assignment
但是我們可以把一整個元組重新賦值
如
a = ('1', 2, 3)
print(a)
a = ('1', 6, 9)
print(a)
a = a+a
print(a)
輸出
('1', 2, 3)
('1', 6, 9)
('1', 6, 9, '1', 6, 9)
注意進行元組的連接時,連接的內容必須都是元組。連接的元組只有一個元素時,不用忘記元素後面的逗號。
3.4、元組的推導式
語法格式與列表類似
例子
import random
randomname = (random.randint(10,100) for i in range(5))
print("生產的元組爲", randomname)
輸出
生產的元組爲 <generator object <genexpr> at 0x000001C573448E60>
可以發現元組推導式生成的結果是一個生成器對象,而不是元組或者列表。這點與列表不同。其中轉化成元組用tuple()函數,轉化爲列表用list函數
通過for循環遍歷,或者使用__next__()方法可以使用元組推導器生成的生成器對象
如:(next()例子)
import random
randomname = (i for i in range(3))
print(randomname.__next__())
print(randomname.__next__())
print(randomname.__next__())
print(tuple(randomname))
輸出
0
1
2
()
如(for循環遍歷例子)
import random
randomname = (i for i in range(3))
for i in randomname:
print(i, end=" ")
print(tuple(randomname))
輸出
0 1 2 ()
3.5、元組與列表的區別
1、元組不可變序列;列表可變序列
2、元組不能修改、添加,刪除單個元素;列表可以
3、元組只支持切片訪問,不支持切片修改;列表都支持
4、元組訪問和處理速度比列表快。使用當只需要對其中的元素進行訪問時,,建議使用元組
5、元組可以作爲字典的鍵;列表不能。
4、字典
字典是無序的可變序列。保存內容是以“鍵—值對”的形式存放,鍵是唯一的,值可以是多個的。
字典的主要特徵:
1、通過鍵來讀取而不是索引
2、字典是任意對象的無序集合
3、字典是可變的,並且可以任意嵌套。
4、字典的鍵必須是唯一和不可變的。
4.1、字典的創建與刪除
創建字典語法格式
dictionary = {'key1':'value1','key1':'value1',...,'keyn':'valuen',}
創建空字典的語法
dictionary = {}或者dictionary = dict()
1、通過映射函數創建字典
dicttionary = dict(zip(list1,list2)) #list1作爲鍵的列表 list2作爲值的列表
注意如果list1與list2長度不一樣,則與最短的列表長度一樣
2、通過“鍵——值對”創建字典
dictionary = dict(key1=value1,key2=value2,...,keyn=value n)
如
a = dict(福州='3',)
print(a)
輸出
{'福州': '3'}
python中還可以使用dict對象的fromkeys()方法創建值爲空的字典
語法格式:
dictionary = dict.fromkeys(list1) #list1爲鍵的列表
當然還有可以通過存在的元組和列表來創建字典(列表不能作爲鍵,字典可以)
如
list = [1, 2, 3]
b = ('1', '2', '3')
c = {b: list}
print(c)
輸出
{('1', '2', '3'): [1, 2, 3]}
3、刪除字典
語法格式
del dictionary
4、把字典變爲空字典
語法格式
dictionary.clear()
當然還有pop(),popitem()方法。
4.2、通過鍵—值對訪問字典
如果想直接輸出字典的內容直接printf(dictionary)
,但是我們一般不這麼做。一般是根據指定的鍵得到我們想要的結果。
如
print(dictionary([key])
但是這樣容易出錯,我們一般使用以下語句
print(dictionary[key] if 'key ' in dictionary else '我的字典裏沒有該內容')
python中推薦使用字典對象的get()
方法獲取指定的鍵的值
語法格式如下:
dictionary.get(key,[default])
說明defaults是當指定的鍵不存的時候就返回一個默認值,default可以省略,如果省略返回None
4.3、遍歷字典
1、通過items()方法遍歷
語法格式:
dictionary.items() #返回可以遍歷的j鍵-值元組列表
2、for循環遍歷該元組列表
如
dictionary = {'qq':'12333'}
for i in dictionary.items():
print(i)
或
for key,value in dictionary():
print(value)
4.4、添加、修改、刪除字典元素
1、添加元素
語法格式
dictionary[key] = value
注意如果鍵名之前已經存在,那麼將換替換該鍵的值
2、刪除某個元素
如:
dictionary = dict[key]
或者
if "key" in dictionary: #防止鍵不存在時報錯
dictionary = dict[key]
4.5、字典推導式
其表現形式與列表推導式相似,這邊不做說明
5、列表、元組、字典的區別
數據結構 | 是否可變 | 是否有序 | 定義符號 |
---|---|---|---|
列表 | 可變 | 有序 | [] |
元組 | 不可變 | 有序 | () |
字典 | 可變 | 無序 | {key,value} |
題目:創建一個包含1~50之間所有素數的列表,打印顯示該列表;隨後只保留該列表前5個數字,刪除其餘內容並打印輸出相應結果;再將每個元素值加。上20,顯示列表內容。
prime_number = [2]
for i in range(3, 51):
for j in range(2, i):
if i % j != 0:
n = i
if j == n-1:
prime_number.append(i)
break
else:
break
print(prime_number)
prime_number = prime_number[:5]
for k in range(5):
prime_number[k] = prime_number[k] + 20
print(prime_number)
6、邏輯判斷內置函數
all(iterable) | 集合中的元素都爲真的時候爲真,注意空字串返回爲True |
---|---|
any(iterable) | 集合中的元素有一個爲真的時候爲真,特別是空串返回False |
cmp(x,y) | x<y,返回負數;x = y,返回0;x>y返回正數 |