python元组 字符串 字典 习题+总结
概念
a_tuple = {’ crazyit ’, 20 , 5 . 6,’f kit ’,-17)
#訪問倒數第1 個元素
print (a_tuple [-1]) # - 17
#訪問倒數第2 個元素
print(a_tuple[-2]) # - fkit
特殊運算符
python中有特殊運算符
in 運算符
in 運算符用于判斷列表或元組是否包含某個元素
Python 提供了內置的ten()、max()、min()全局函數來獲取元組或列表的長度、最大值和最小值。
由于max()、min()要對元組、列表中的元素比較大小,因此程序要求傳給max ()、min ()函數的元組、列表的元素必須是相同類型且可以比較大小。
封包和拆包
Python 還提供了序列封包( Sequence Packing )和序列解包( Sequence Unpacking )的功能。程序把多個值賦給一個變量時, Python 會自動將多個值封裝成元組。這種功能被稱為序列封包。
程序允許將序列(元組或列表等)直接賦值給多個變量,此時序列的各元素會被依次賦值給每個變量(要求序列的元素個數和變量個數相等)。這種功能被稱為序列解包。
元組練習題
1、元組概念
寫出下面代碼的執行結果和最終結果的類型
(1, 2)*2
(1, )*2
(1)2
分析為什么會出現這樣的結果.
----因為元組的乘法與單個數字乘法不同,并不會將數值進行乘積,而且將整體變化,如一個元組2以后變成一個含有雙倍數量元素的元組
通過索引輸出:
ttu=(‘cra’,‘he’,‘zi’,423,11,23)
print(ttu[1:3])
(‘he’, ‘zi’)
2、拆包過程是什么?
----示例:
vals = 10 , 20 , 30
print(vals)
(10, 20, 30)
a, b = 1, 2
上述過程屬于拆包嗎?
—不屬于
可迭代對象拆包時,怎么賦值給占位符?
賦給單個對象算不算拆包?
還不清楚如果元組中有數字又有字符串時占位符怎么用,試了一下字符串:
輸出:
he ziii yi mutai danshen wurenchaoguo
Process finished with exit code 0
輸出:
(‘hehe’, ‘liang’, ‘boy’, ‘ooo’, 27, 1)
hehe
liang
boy
ooo
27
1
拆包:
#序列解包: 將a_tuple 元組的各元素依次賦值給a 、b 、c 、d、e 變量 a , b , c , d , e = a tuple print (a, b , c , d , e)先封包再解包:
python一種輸出類似C語言中printf("%s"):
nice=input(“請輸入:”)
請輸入:靜靜
print(‘nice is %s:’%(nice))
nice is 靜靜:
一個很特別的點:在序列解包時也可以只解出部分變量,剩下的依然使用列表變量保存。為了使用這種解包方式,
Python 允許在左邊被賦值的變量之前添加“*”,那么該變量就代表一個列表,可以保存多個集合
元素。
Process finished with exit code 0
字符串
字符串的切片與拼接
類似于元組具有不可修改性
切片通常寫成 start:end 這種形式,包括「start 索引」對應的元素,不包括「end索引」對應的元素。
python中有一個特殊點:負索引(c++中無)
索引值可正可負,正索引從 0 開始,從左往右;負索引從 -1 開始,從右往左。使用負數索引時,會從最后一個元素開始計數。最后一個元素的位置編號是 -1。
例子:
s = 'Python' print(s) # Python print(s[2:4]) # th print(s[-5:-2]) # yth print(s[2]) # t print(s[-1]) # n. 字符串的常用內置方法
capitalize() 將字符串的第一個字符轉換為大寫。
print(str2.capitalize()) # Xiaoxie
lower() 轉換字符串中所有大寫字符為小寫。
upper() 轉換字符串中的小寫字母為大寫。
swapcase() 將字符串中大寫轉換為小寫,小寫轉換為大寫。
count(str, beg= 0,end=len(string)) 返回str在 string 里面出現的次數,如果beg或者end指定則返回指定范圍內str出現的次數。
endswith(suffix, beg=0, end=len(string)) 檢查字符串是否以指定子字符串 suffix 結束,如果是,返回 True,否則返回 False。如果 beg 和 end 指定值,則在指定范圍內檢查。
startswith(substr, beg=0,end=len(string)) 檢查字符串是否以指定子字符串 substr 開頭,如果是,返回 True,否則返回 False。如果 beg 和 end 指定值,則在指定范圍內檢查。
find(str, beg=0, end=len(string)) 檢測 str 是否包含在字符串中,如果指定范圍 beg 和 end,則檢查是否包含在指定范圍內,如果包含,返回開始的索引值,否則返回 -1。
rfind(str, beg=0,end=len(string)) 類似于 find() 函數,不過是從右邊開始查找。
字符串習題
練習題:
1、字符串函數回顧
怎么批量替換字符串中的元素?
怎么把字符串按照空格進?拆分?
怎么去除字符串?位的空格?
以上功能實現代碼:
結果:
2、實現isdigit函數
題目要求
實現函數isdigit, 判斷字符串里是否只包含數字0~9
def isdigit(string):
“”"
判斷字符串只包含數字
:param string:
:return:
“”"
# your code here
pass
代碼:
def isdigit(string):# your code herelen1 = len(string)for i in range(len1):try:int(string[i])except ValueError:return Falsereturn Trueif __name__ == '__main__':name = "heziyi"print(isdigit(name))num = '1234423'print(isdigit(num))結果:
3、leetcode 5題 最長回文子串
給定一個字符串 s,找到 s 中最長的回文子串。你可以假設 s 的最大長度為 1000。
示例:
輸入: “babad”
輸出: “bab”
輸入: “cbbd”
輸出: “bb”
力扣中等難度的題。。。。我承認我現在事情有點多的情況下沒法安分地去思考這個題。。。。一開始想到先定義函數求出一個是回文子串的串長度,然后在main中可以循環來判斷所有子串長度的最大值,輸出長度最大的串然后寫出來的一直好像有問題,官方題解看了一下,之前都不知道原來可以return兩個值,python中的語法還真是很隨意。
在pycharm里面跑了一下這個:
結果還是typeerror:
File “C:\Users\14172\PycharmProjects\pythonProject3\main.py”, line 40, in
print(biggest(st))
File “C:\Users\14172\PycharmProjects\pythonProject3\main.py”, line 36, in biggest
return string[int(start),int(end+1)]
TypeError: string indices must be integers
Process finished with exit code 1
手頭還有好多別的事,這個問題回頭再來看吧。。。感覺應該是語法錯誤吧。。。
字典
程序既可使用花括號語法來創建字典,也可使用dict() 函數來創建字典。
在使用花括號語法創建字典時,花括號中應包含多個key-value 對, key 與value 之間用英文冒號隔開;多個key-value 對之間用英文逗號隔開。
直接print()括號中為元組的名字時原樣輸出:
scores = {'chinese': 89,'math': 92 ,'english': 93}print(scores)# 空的花括號代表空的dietempty_dict = {}print(empty_dict)#使用元組作為diet的keydict2 = {(20, 30): 'good ’ , 30 :’ bad'}print(dict2)結果:
{‘chinese’: 89, ‘math’: 92, ‘english’: 93}
{}
{(20, 30): ‘good ’ , 30 :’ bad’}
Process finished with exit code 0
- 注意:
元組可以作為diet 的key,但列表不能作為元組的key這是由于diet 要求key必須是不可變類型,但列表是可變類型,因此列表不能作為元組的key 。
在使用diet()函數創建字典時, 可以傳入多個列表或元組參數作為key-value 對, 每個列表或元組將被當成一個key-value 對,因此這些列表或元組都只能包含兩個元素。
示例:
vegetables =[('name','何梓貽') ,('gender','girl') ,('age',19)]vet3 = dict(vegetables)print(vet3)fruit=[['name','何梓貽'],['gender','girl']]vet2 = dict(fruit)print(vet2)輸出:
{‘name’: ‘何梓貽’, ‘gender’: ‘girl’, ‘age’: 19}
{‘name’: ‘何梓貽’, ‘gender’: ‘girl’}
還可通過為diet 指定關鍵字參數創建字典,此時字典的key 不允許使用表達式:
dict4 = dict (name=‘何梓貽’,age=19)
print(dict4)
{‘name’: ‘何梓貽’, ‘age’: 19}
操作字典
1.如果要為diet 添加key-value 對,只需為不存在的key 賦值即可
#對不存在的key 賦值,就是增加key - value 對
scores [‘數學’]= 93
2.如果要刪除宇典中的key- value 對,則可使用del 語句。例如如下代碼
#使用del i吾句刪除key - value 對
del scores [‘數學’]
3.如果對diet 中存在的key-value 對賦值,新賦的value巳就會覆蓋原有的value , 這樣即可改變diet中的key-value 對
4.如果要判斷字典是否包含指定的key ,則可以使用in 或not in 運算符,對于dict 而言,in或not in 運算符都是基于key 來判斷的
5.#清空cars 的所有key-value 對
cars . clear ()
6.get()方法其實就是根據key 來獲取value , 它相當于方括號語法的增強版當使用方括號語法訪問并不存在的key 時,字典會引發KeyError 錯誤
輸出張三
7.items()、keys()、values()分別用于獲取字典中的所有key-value 對、所有key、所有value 。這三個方法依次返回diet-items 、diet keys 和diet_values 對象, Python 不希望用戶直接操作這幾個方法,但可通過list()函數把它們轉換成列表。
總結:字典的key 是它的關鍵。換個角度來看,字典的k巳y 就相當于它的索引,只不過這些索引不一定是整數類型,字典的key 可以是任意不可變類型。
輸出:
dict_items([(‘name’, ‘李四’), (‘gender’, ‘girl’)])
[(‘name’, ‘李四’), (‘gender’, ‘girl’)]
輸出:
dict_values([‘李四’, ‘girl’])
[‘李四’, ‘girl’]
8.updateO方法可使用一個字典所包含的key- value 對來更新己有的字典。在執行update()方法時,如果被更新的字典中己包含對應的key-value 對, 那么原value 會被覆蓋:如果被更新的字典中不包含對應的key-value 對, 則該key-value 對被添加進去
cars = {'name':'張三','age':19}cars.update({'name':'lisi'})print(cars)輸出:
{‘name’: ‘lisi’, ‘age’: 19}
9.pop()方法用于獲取指定key 對應的value ,并刪除這個key- value 對。如下方法示范了pop ()方法的用法。
10.popitem()方法用于隨機彈出字典中的一個key-value對。
- 注:
實際上字典的popitem()是彈出字典中最后一個鍵值對由于字典存儲key-value 對的順序是不可知的,因此開發者感覺字典的popitem()方法是“隨機”彈出的,但實際上字典的popitem()方法總是彈出底層存儲的最后一個key-value 對 - 注意:
列表不允許對不存在的索引賦值;但字典則允許直接對不存在的key 賦值。
字典的常用方法:
在交互式解釋器中輸入dir:
dir(dict)
[‘class’, ‘class_getitem’, ‘contains’, ‘delattr’, ‘delitem’, ‘dir’, ‘doc’, ‘eq’, ‘format’, ‘ge’, ‘getattribute’
, ‘getitem’, ‘gt’, ‘hash’, ‘init’, ‘init_subclass’, ‘ior’, ‘iter’, ‘le’, ‘len’, ‘lt’, ‘ne’, ‘new’, ‘or’
, ‘reduce’, ‘reduce_ex’, ‘repr’, ‘reversed’, ‘ror’, ‘setattr’, ‘setitem’, ‘sizeof’, ‘str’, ‘subclasshook’, ‘clear’,
‘copy’, ‘fromkeys’, ‘get’, ‘items’, ‘keys’, ‘pop’, ‘popitem’, ‘setdefault’, ‘update’, ‘values’]
字典嵌套
在字典中存儲列表
習題中第二題c++即嵌套了列表
data = {
‘python’: {‘上學期’: ‘90’, ‘下學期’: ‘95’},
‘c++’: [‘95’, ‘96’, ‘97’],
‘java’: [{‘月考’: ‘90’, ‘期中考試’: ‘94’, ‘期末考試’: ‘98’}]
}
在字典中存儲字典
例子:
輸出:
score
{‘語文’: 99, ‘math’: 88, ‘pe’: 100}
information
{‘name’: ‘何梓貽’, ‘age’: 19}
若 print(list(gras2.values())[1])
輸出19
其中grade中包含兩個鍵,每個與鍵相關聯的值都是一個字典
字典練習題
:
1、字典基本操作
字典內容如下:
dic = {
‘python’: 95,
‘java’: 99,
‘c’: 100
}
用程序解答下面的題目
字典的長度是多少
請修改’java’ 這個key對應的value值為98
刪除 c 這個key
增加一個key-value對,key值為 php, value是90
獲取所有的key值,存儲在列表里
獲取所有的value值,存儲在列表里
判斷 javascript 是否在字典中
獲得字典里所有value 的和
獲取字典里最大的value
獲取字典里最小的value
字典 dic1 = {‘php’: 97}, 將dic1的數據更新到dic中
結果:
2、字典中的value
有一個字典,保存的是學生各個編程語言的成績,內容如下
data = {
‘python’: {‘上學期’: ‘90’, ‘下學期’: ‘95’},
‘c++’: [‘95’, ‘96’, ‘97’],
‘java’: [{‘月考’:‘90’, ‘期中考試’: ‘94’, ‘期末考試’: ‘98’}]
}
各門課程的考試成績存儲方式并不相同,有的用字典,有的用列表,但是分數都是字符串類型,請實現函數transfer_score(score_dict),將分數修改成int類型
def transfer_score(data):
# your code here
代碼:
def transfer_score(dataa):dataa = int(dataa)return dataaif __name__ == '__main__':data = {'python': {'上學期': '90', '下學期': '95'},'c++': ['95', '96', '97'],'java': [{'月考': '90', '期中考試': '94', '期末考試': '98'}]}data1 = list(data.values());print(data1)print(data1[0])print(data1[1])print(data1[2][0])for i in range(len(data1[0])):list(data1[0].values())[i] = transfer_score(list(data1[0].values())[i])print(list(data1[0].values())[i],end=" ")print('\n')for i in range(len(data1[1])):data1[1][i] = transfer_score(data1[1][i])print(data1[1][i], end=" ")print('\n')for i in range(len(data1[2][0])):list(data1[2][0].values())[i] = transfer_score(list(data1[2][0].values())[i])print(list(data1[2][0].values())[i], end=" ")結果:
一些思考:感覺寫的有點冗長,主要是拆包部分,但由于data中三個數據類型不一樣,不好用一個統一的循環進行拆,于是只能一個一個拆
一些其他的總結
創建類:
class Person:def __init__(self, name):self.name = namedef getName(self):return self.namedef color(self, color):print "%s is %s" % (self.name, color)def__init__叫作初始化函數(因為還有一個__new__的函數是
真正的構造。所以,將__init__稱之為初始化函數)。
divmod() 函數把除數和余數運算結果結合起來,返回一個包含商和余數的元組(a // b, a % b)。
一些轉化類型的函數
python中的字符數字之間的轉換函數
int(x [,base ]) 將x轉換為一個整數
★★★int()函數可以把數字字符串轉化成int類型的數字,但是不能傳入非數字的字符串
long(x [,base ]) 將x轉換為一個長整數
float(x ) 將x轉換到一個浮點數
complex(real [,imag ]) 創建一個復數
str(x ) 將對象 x 轉換為字符串
repr(x ) 將對象 x 轉換為表達式字符串
eval(str ) 用來計算在字符串中的有效Python表達式,并返回一個對象
tuple(s ) 將序列 s 轉換為一個元組
list(s ) 將序列 s 轉換為一個列表
chr(x ) 將一個整數轉換為一個字符
unichr(x ) 將一個整數轉換為Unicode字符
ord(x ) 將一個字符轉換為它的整數值
hex(x ) 將一個整數轉換為一個十六進制字符串
oct(x ) 將一個整數轉換為一個八進制字符串
chr(65)=‘A’
ord(‘A’)=65
總結
以上是生活随笔為你收集整理的python元组 字符串 字典 习题+总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 笔记·mybatis核心对象和全局配置文
- 下一篇: VUE内置组件 vue使用插槽分发内容