遍歷列表-for循環
列表中存儲的元素可能非常多,如果想一個一個的訪問列表中的元素,可能是一件十分頭疼的事。那有沒有什么好的辦法呢?當然有!使用 for循環
假如有一個食物名單列表,通過 for循環 將列表中的食物名稱都打印出來
# 定義一個食物名單列表foods = ['potato', 'tomato', 'noodles', 'apple', 'pizza']# 循環訪問foods列表for food in foods: print(food)
輸出:
potato tomato noodles apple pizza
for循環 將foods列表中的元素依次輸出了出來
for food in foods: 這行代碼表示將foods列表中的元素依次取出,每次次元素的值賦給變量food;本句代碼最后以冒號結尾
print(food) 本行代碼之前有四個字符的 縮進 ,表示這行代碼屬于 for food in foods: 的代碼塊
for循環每次從列表中取出一個元素后,都會進入代碼塊中執行一遍,即輸出元素的名稱;直到將列表所有的元素都遍歷一次后,循環停止
# 定義一個食物名單列表foods = ['potato', 'tomato', 'noodles', 'apple', 'pizza']# 循環訪問foods列表for food in foods: print(food)# 循環之外的代碼print('循環已經完畢')print('循環已經完畢') 的前面沒有縮進,說明它不屬于for循環塊中的代碼;所以,當for循環完畢后,會接著執行下面的這句代碼輸出:
potato
tomato
noodles
apple
pizza
循環已經完畢
其中,變量 food 是一個臨時變量,可以隨意取名稱;不過建議取有意義的名稱,在這里用foods表示食物列表,用food表示列表中的食物,方便理解
循環也可以嵌套使用
假如小明喜歡一些食物,這些食物名稱被存儲到foods1列表中;小紅喜歡另一些食物,這些食物名稱被存儲到foods2中;現在想知道小明與小紅所喜歡的食物是否有相同的,則可用如下方式:
# 小明喜歡的食物列表 foods1 = ['potato', 'tomato', 'noodles', 'apple', 'pizza']# 小紅喜歡的食物列表foods2 = ['chocolate', 'pizza', 'maize', 'watermelon']# 通嵌套循環尋找出兩個列表中相同的食物名稱for food1 in foods1: for food2 in foods2: if food1 == food2: print('小明和小紅共同喜歡的食物是', food1)輸出:
小明和小紅共同喜歡的食物是 pizza
for food2 in foods2: 前面有縮進,說明它是 for food1 in foods1: 塊中的代碼;第一外循環從小明喜歡的食物列表中依次取出食物名稱,然后進行自身的代碼塊中;第二行代碼依次遍歷小紅喜歡的食物列表,然后進行循環體(代碼塊),然后判斷foods1中的第一個元素與foods2中的第一個元素是否一樣,foods1中的第一個元素與foods2中的第二個元素是否一樣,……,foods1中的第一個元素與foods2中的第四個元素是否一樣,如果一樣,則執行打印 print('小明和小紅共同喜歡的食物是', food1) ;接著判斷foods1中的第二個元素與foods2中的第1個元素是否一樣,……,foods1中的第二個元素與foods2中的第四個元素是否一樣,如果一樣,則執行打印 print('小明和小紅共同喜歡的食物是', food1) ……直到判斷到foods1中的第五與foods2的所有元素比較一次后,嵌套循環執行完畢
注: if 表示判斷一個結果,如果結果是真,則執行代碼塊,如果不是真,則跳過代碼塊; == 表示判斷兩個值是否相等,如果相等返回真,如果不相等返回假。這兩個知識點將在后面進行詳細探討
在寫 for 循環語句的時候,造成別忘記在后面加上 冒號 ,循環體中的代碼千萬別忘記添加縮進;縮進一般是一個制表符的距離,即四個空格的距離;不過,不建議將制表符與空格符混合使用
創建數值列表-range()
前面的列表中的元素都是字符串類型的,列表中可以存儲任意對象,現在定義一個數值列表
numbers = [1,2,3,4,5]
如果想定義一個從1到1000的數值列表,手動將這些數值一個一個寫進列表里,一點也不高效;可以使用函數 range() 快速創建一系列數字
for value in range(1,6): print(value)
輸出:
rnage(1, 6) 會生成從1到5的數字,6表示到6的時候就停止創建動作,如果想創建1到1000的數字,則是 range(1, 1001)
通過 list() 可以將 range() 創建的數字轉換成列表
# 輸出range()看看numbers = range(1,6)print('range: ',numbers)# 轉換成列表后,再輸出看看numbers = list(numbers)print('list: ',numbers)輸出:
range: range(1, 6) list: [1, 2, 3, 4, 5]
可以看出, range() 返回的是一個 可迭代對象 ,經過轉換后才是一個列表對象
還可以通過指定 步長 ,來生成一系列偶數
numbers = range(2,21,2)print(list(numbers))
輸出:
[2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
range(start, stop[, step]) 這是Python的使用說明文檔中關于 range() 的使用說明,start表示從哪個數字開始,stop表示到哪個數字停止,[, step]表示步長,方括號表示這個參數是可選的,即可寫可不寫
可以在Python的IDLE中輸入 help(range) 來得到關于range()的幫助文檔
>>> help(range)
一些簡單的、常用的數字列表統計函數:
# 定義一個偶數列表numbers = list(range(2,21,2))# 求數值列表中最小的元素值print(min(numbers))# 求數值列表中最大的元素值print(max(numbers))# 求數值列表所有元素的和print(sum(numbers))
輸出:
列表解析
直接看下面代碼
# 定義一個偶數列表numbers = list(range(2,21,2))squares = [value**2 for value in numbers]print(squares)
輸出:
[4, 16, 36, 64, 100, 144, 196, 256, 324, 400]
for循環的這種寫法 squares = [value**2 for value in numbers] 叫做 列表解析
首先,寫一對中括號,它表示一個列表;然后列表中分類兩部分,第一個部分是表達式,即 value**2 ,這個表達的意思是計算一個值的乘方;第二部分是列表循環,即 for value in numbers ;最終結果是將列表中的每個值都按乘方計算一次后,放入一個列表中,再賦值給變量 squares
這里需要注意的是,循環后面沒有冒號,可以理解為將循環體的代碼塊精簡成了一個表達式
列表切片
只獲取列表的部分元素,這樣的操作叫作 切片
切片通過列表的索引進行操作,即從哪個索引開始,到哪個索引結果,將這段元素取出
# 定義一個食物列表foods = ['potato', 'tomato', 'noodles', 'apple', 'pizza']# 取出第二個元素到第四個元素print(foods[1:4])
輸出:
['tomato', 'noodles', 'apple']
foods[1:4] 方括號中的1表示索引1位置,4表示索引4位置;需要注意的是,1表示從索引1開始,而4表示到索引4就結束;也就說,索引4位置的元素不會返回;所以,這里返回的結果是從索引1到索引3的三個元素
如果省略冒號前的數字,則表示從開始的位置取值
# 從索引0開始,取到索引4之前的所有值foods[:4]如果省略冒號后的數字,則表示一直取到列表的末尾# 從索引1開始,一下取到列表結束的位置foods[1:]如果只有冒號,表示取所有數據# 取所有數據foods[:]
還可能使用負數
# 從倒數3個元素開始,一直取到末尾
foods[-3:]
for循環與切片的結合
# 定義一個食物列表foods = ['potato', 'tomato', 'noodles', 'apple', 'pizza']# 打印第2個到第4個元素for food in foods[1:4]: print(food)
輸出:
tomato noodles apple
關于列表的復制
先來看個例子
foods1 = ['potato', 'tomato', 'noodles', 'apple', 'pizza']foods2 = foods1print(foods1)print(foods2)
將foods1列表賦值給foods2列表,看似是一個復制動作,但foods1與foods2實際上是一個對象
foods1 = ['potato', 'tomato', 'noodles', 'apple', 'pizza']foods2 = foods1foods1.append('chocolate')print(foods1)print(foods2)輸出結果:
['potato', 'tomato', 'noodles', 'apple', 'pizza', 'chocolate'] ['potato', 'tomato', 'noodles', 'apple', 'pizza', 'chocolate']
因為, ['potato', 'tomato', 'noodles', 'apple', 'pizza'] 創建了一個列表對象,foods1變量與foods2變量實際存儲的是指向 ['potato', 'tomato', 'noodles', 'apple', 'pizza'] 的一個引用,所以,修改foods1后,發現food2也變了
復制需要另外創建出一個一模一樣的對象出來,但它們必須的確是兩個對象才行
foods1 = ['potato', 'tomato', 'noodles', 'apple', 'pizza']foods2 = foods1[:]foods1.append('chocolate')print(foods1)print(foods2)輸出:
['potato', 'tomato', 'noodles', 'apple', 'pizza', 'chocolate'] ['potato', 'tomato', 'noodles', 'apple', 'pizza']
foods1[:] 返回foods1所有的元素,并創建了一個副本,這個副本是另一個對象,然后再會給了foods2,因此在更改foods1時,沒有影響到副本
也可以使用 id(foods1);id(foods2) 來查看列表對象在計算機內的ID,ID不同,則不是同一個對象
簡單談一下元組
元組的使用與列表類似,不同的,列表是可改變的,而元組不是可改變的;列表用 [] 來定義,元組則使用 () 來定義
# 定義一個元組numbers = (1,2,3,4,5)# 支持索引訪問print(numbers[1])# 支持循環for number in numbers: print(number) # 不支持對元素的修改,執行下面代碼會報錯numbers[0] = 11
報錯內容
Traceback (most recent call last): File "C:/Users/Administrator/Desktop/s.py", line 11, in <module> numbers[0] = 11 TypeError: 'tuple' object does not support item assignment
下面看一段示例代碼the day of python learning(列表)
列表是python中的基礎數據類型之一,其他語言中也有類似于列表的數據類型,比如js中叫數組,他是以[]括起來,每個元素以逗號隔開,而且他里面可以存放各種數據類型比如:li = [‘alex',123,Ture,(1,2,3,'wusir'),[1,2,3,'小明',],{‘name':'alex'}]列表相比于字符串,不僅可以儲存不同的數據類型,而且可以儲存大量數據,32位python的限制是 536870912 個元素,64位python的限制是 1152921504606846975 個元素。而且列表是有序的,有索引值,可切片,方便取值。# li = ['alex',[1,2,3],'wusir','egon','女神','taibai']# l1 = li[0]# print(l1) #“alex‘# l2 = li[1] #[1,2,3]# print(l2)# l3 = li[0:3] #['alex', [1, 2, 3], 'wusir']# print(l3)li = ['alex','wusir','egon','女神','taibai']#增加 append() insert()# li.append('日天')# li.append(1)# print(li)# while 1:# username = input('>>>')# if username.strip().upper() == 'Q':# break# else:# li.append(username)# print(li)# li.insert(4,'春哥')# print(li)# li.extend('二哥')# li.extend([1,2,3])# print(li)#刪li = ['taibai','alex','wusir','egon','女神',]# name = li.pop(1) # 返回值# name = li.pop() # 默認刪除最后一個# print(name,li)# li.remove('taibai') # 按元素去刪除# print(li)# li.clear() # 清空# print(li)# del li# del li[0:2] # 切片去刪除# print(li)#改# li[0] = '男獸'# li[0] = [1,2,3]#切片# li[0:3] = '云姐plfdslkmgdfjglk'# li[0:3] = [1,2,3,'春哥','咸魚哥']# print(li)#查# for i in li:# print(i)# print(li[0:2])#公共方法:# l = len(li)# print(l)# num = li.count('taibai')# print(num)# print(li.index('wusir'))# li = [1,5,4,7,6,2,3]# #正向排序# # li.sort()# # print(li)# #反向排序# # li.sort(reverse=True)# # print(li)# #反轉# li.reverse()# print(li)#列表的嵌套li = ['taibai','武藤蘭','苑昊',['alex','egon',89],23]# print(li[1][1])# name = li[0].capitalize()# # print(name)# li[0] = name# li[0] = li[0].capitalize()# li[2] = '苑日天'# print(li[2].replace('昊','ritian'))# li[2] = li[2].replace('昊','ritian')# li[3][0] = li[3][0].upper()# print(li)總結
以上所述是小編給大家介紹的Python Learning 列表的更多操作及示例代碼,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VEVB武林網網站的支持!
新聞熱點
疑難解答