Python知識整合(序列的應用)

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返回正數
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章