您好,登錄后才能下訂單哦!
列表是python中常用的重要數據結構,它與字符串,元組都屬于序列,支持序列相關操作;
本文主要內容如下:
1>列表定義方式與基本用法;
2>列表遍歷;
2>字符串,元組與列表區別;
3>列表常用函數介紹。
列表在Python中表示方法:[val1, val2, val3],我們可以認為列表是一個大容器,里面可以放任意對象;
1)直接定義列表:
#數字列表,價格列表
price = [90, 89, 70,100]
#字符串列表,球隊列表
teams = ['恒大', '富力','申花', '國安']
#二維列表:學生成績列表:語文數學
scores = [[90, 80],[70,60],[30,40]]
2)使用list函數生成列表:
list():創建空列表;
list(itemable):將可迭代對象生成列表;
使用方式如下:
#字符串轉列表:
print(list('helloworld'))
#range對象轉列表:
print(list(range(10)))
#enumerate對象
print(list(enumerate('hello')))
3)修改列表元素值:
列表是一種可變數據結構,我們可以直接對其元素進行修改,例如:
#某用戶關注手機類型如下
phones = ['huawei', 'vivo', 'oppo', 'xiaomi']
print(phones)
#用戶想把第一個修改榮耀,操作如下:
phones[0] = '榮耀'
print(phones)
輸出結果如下:
['huawei', 'vivo', 'oppo', 'xiaomi']
['榮耀', 'vivo', 'oppo', 'xiaomi']
列表是一個可迭代對象,我們可以直接使用for循環對其遍歷;
1)遍歷一維列表:
phones = ['huawei', 'vivo', 'oppo', 'xiaomi']
#for循環遍歷
for phone in phones:
print(phone)
2)遍歷二維列表:
如果是二維列表,我們希望遍歷到每個元素,舉個例子:
#NBA運動員,列表組成:球員列表,球員
#我們希望遍歷每個球員名稱
players = [['哈登', '庫里','保羅'],['詹姆斯','杜蘭特'],'霍華德']
我們可以遍歷players列表,但是如何遍歷每個子列表?
我們需要知道這個元素是不是列表,如何確認players中每個元素類型?
我們可以使用type或者isinstance函數,這兩個函數說明如下:
函數 | 說明 |
---|---|
type(object) | 返回對象類型 |
isinstance(obj, class_or_tuple, /) | obj對象是否是指定類型或者指定其中一個 |
看下具體操作:
s = 'math'
#判斷類型
print('"{}"is str={}'.format(s, isinstance(s, str)))
#查看類型
print('type("{}")={}'.format(s, type(s)))
a = 10
print('type({})={}'.format(a, type(a)))
#查看列表每個元素類型
items = ['a',[1,2]]
print('items=',items)
for index, item in enumerate(items):
print('type(items[{}])={}'.format(index, type(item)))
輸出結果如下:
"math"is str=True
type("math")=<class 'str'>
type(10)=<class 'int'>
items= ['a', [1, 2]]
type(items[0])=<class 'str'>
type(items[1])=<class 'list'>
這時我們想到什么?判斷列中重元素是不是列表,如果是的話,繼續遍歷,否則打印出來,偽代碼如下:
players = [['哈登', '庫里','保羅'],['詹姆斯','杜蘭特'],'霍華德']
for item in players:
if isinstance(item, list):
遍歷子列表
else:
print(item)
這個是我們的思路,剩下的就是代碼實現,如下:
players = [['哈登', '庫里','保羅'],['詹姆斯','杜蘭特'],'霍華德']
for item in players:
if isinstance(item, list):
for val in item:
print(val)
else:
print(item)
再來思考下:如何遍歷多維列表?根據上面實現,偽代碼如下:
players = [['哈登', '庫里','保羅'],['詹姆斯','杜蘭特'],'霍華德']
for item in players:
if isinstance(item, list):
for val in item:
if isinstance(val, list):
for x in val:
if....
...
....
#對比起,我實在寫不下去了
else:
print(val)
else:
print(item)
這里可以考慮使用遞歸了,這個是我們后面學習內容,暫時就到二維列表了。
字符串與元組是不可變的數據結構,列表是可變的數據結構,什么是可變與不可變?我們可以對列表的某個元素值進行修改,我們來嘗試修改字符串某值:
#對比列表與字符串
list1 = [1,2,3]
list1[0] = 10
print(list1)
#修改字符串值:
s = 'test'
s[0] = 'T'
print(s)
輸出結果:
[10, 2, 3]
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-103-67d2a1e0bacd> in <module>()
5 #修改字符串值:
6 s = 'test'
----> 7 s[0] = 'T'
8 print(s)
TypeError: 'str' object does not support item assignment
運行出錯,因為字符串不能被修改。這時候我們應該有個疑問:字符串的替換,大小寫轉換,為什么可以?來個例子我們看下:
#王者榮耀英雄名
Heroes = ['蘇烈','花木蘭','馬可波羅','白起','鬼谷子']
print('{} addr={}'.format(Heroes, id(Heroes)))
#更改第一個元素,然后對比列表地址
Heroes[0] = '程咬金'
print('{} addr={}'.format(Heroes, id(Heroes)))
#定義字符串,然后大小寫變化,在看地址
s = 'CookBook'
print('{} addr={}'.format(s, id(s)))
s = s.title()
print('{} addr={}'.format(s, id(s)))
#結果:列表修改后地址不變,但是字符串地址變化,
字符串不是在原來基礎修改,而是創建新的字符串,這個就是字符串元組與列表不同,大家在理解下。
1)序列常規操作:
Heroes = ['蘇烈','花木蘭','馬可波羅','白起','鬼谷子']
#取值:
print(Heroes[0])
#獲取長度:
print(len(Heroes))
#切片操作:
print(Heroes[1:])
2)數字列表相關操作:
對列表常用的方法如下:
方法 | 說明 |
---|---|
max(iterable, *[, default=obj, key=func]) | 獲取最大值 |
min(iterable, *[, default=obj, key=func]) | 獲取最小值 |
sum(iterable, start=0, /) | 對數字可迭代對象求和 |
這些方法使用如下:
#考試成績得分
scores = [90, 80, 95, 85]
#獲取最大值:
print('最高分:', max(scores))
#獲取最小值:
print('最低分:', min(scores))
#獲取總分
allscore = sum(scores)
print('總得分:', allscore)
#平均分
lens = len(scores)
print('平均分:',allscore/lens)
到這里我們對列表常用方法就介紹完了,如果有編寫問題,歡迎在評論區指正;
關于列表詳細說明與使用,歡迎大家關注老貓專欄:https://blog.51cto.com/cloumn/detail/34。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。