【4】python數據類型:列表/數組(list)


Python內置的一種數據類型是列表:list。
list是一種有序的集合,可以隨時添加和刪除其中的元素。通過下標訪問列表中的元素(又稱索引、角標),下標從0開始計數。
list定義,使用中括號[]。

list1 = [1,2,3,4] #一個普通的數組
list2 = ['marry','lily',[50,'monkey']] #二維數組
list3 = ['name','sex',['lily',124,['aaaa','bbb']]] #三維數組,嵌套幾層就是幾維

1、list的增、刪、改、查

#
name=['牛牛','帆帆','月月',666,'aaa',68.99]#定義一個list列表
name.append('小月')# 默認在最后面添加元素
print(name)
name.insert(0,'小軍')#指定下標位置添加元素
print(name)

執行結果如下:
['牛牛', '帆帆', '月月', 666, 'aaa', 68.99, '小月']
['小軍', '牛牛', '帆帆', '月月', 666, 'aaa', 68.99, '小月']


#
name=['牛牛','帆帆','月月',666,'aaa',68.99]#定義一個list列表
print('修改之前:',name)
name[0]='曉紅'#指定下標0的元素修改成“曉紅”
print('修改之后:',name)

執行結果如下:
修改之前: ['牛牛', '帆帆', '月月', 666, 'aaa', 68.99]
修改之后: ['曉紅', '帆帆', '月月', 666, 'aaa', 68.99]


#
name=['牛牛','帆帆','月月',666,'aaa',68.99]#定義一個list列表
print(name[0]) # 獲取第一個元素
print(name[-1]) # -1代表最后一個元素

執行結果如下:
牛牛
68.99


#
name.remove('aaa') # 刪除指定的值,如果有兩個一樣的,只會刪除前面的
del name[0] # 刪除指定位置的值
name.pop() # 不傳入下標的話,刪除最后一個值,傳入下標刪除指定位置的值
name.clear() # 清空列表

 

2、list其他常用操作方法

name=['大牛','帆帆','月月',666,'aaa',68.99]#定義一個list列表
name2 = [1, 2, 3, 4, ['hehe', 'haha']]


print(len(name))#獲取個數/長度
print(name.index('帆帆')) # 取索引
print(name.count('帆帆')) # 取帆帆出現的次數
print(name*2)#乘法
print(name+name2)#加法
name.reverse() # 反轉的寫法之一
name.sort(reverse=True)#反轉寫法之二
name.extend(name2) # 擴展列表,也就是把name2的值加到name里面
print("hello" in name)#檢查成員

 

 3、切片

切片也就是另一種方式獲取列表的值,它可以獲取多個元素,可以理解為,從第幾個元素開始,到第幾個元素結束,獲取他們之間的值。
格式是name:[0:6],意思說要獲取name的第一個元素到第五個元素,切片是不包含后面那個元素的值的,記住顧頭不顧尾。
切片后面還有可以寫一個參數,叫做步長,也就是每幾個元素,取一次,切片操作也可以對字符串使用,和列表的用法一樣。

(1)列表切片

l=list(range(1,11))#自動生成1-10的數,然后類型轉換成列表list

print(l)
print(l[0:4])#顧頭不顧尾,取下標0,1,2,3
print(l[:5])#如果最前面沒有寫的話,代表從0開始取
print(l[4:])#如果冒號后面沒有寫,代表取到最后
print(l[:])
print(l[0:8:2])#步長,每2個取一個
print(l[::2])
print(l[1::2])#打印1-10的所有偶數
print(l[::2])#打印1-10的所有奇數
print(l[::-2])#如果步長是負數,那么從右往左取值

 

(2)多維數組的切片

nums1=[1,2,3,[4,56]]
nums2=[1,2,3,4,['a','b','c','d','e',['','','']],['','']] #三維數組
print(nums1[3][1])#要取56
print(nums2[4][5][1])#
print(nums2[-1][-1])#

 

(3)字符串切片

for i in range(10):
    s=input('請輸入一個字符串:')
    if len(s)<2:
        print('請輸入大於2位的字符串')
    elif s==s[::-1]:
        print('是回文')
    else:
        print('不是回文')

 

4、枚舉函數

enumerate()是python的內置函數,enumerate在字典上是枚舉、列舉的意思。
對於一個可迭代的(iterable)/可遍歷的對象(如列表、字符串),enumerate將其組成一個索引序列,利用它可以同時獲得索引和值。
enumerate多用於在for循環中得到計數。

# i存的是下標
for i,j in enumerate(('a','b','c')):
     print(i,j)
 
pwd=['123','456','789']
for index,p in enumerate(pwd):
    pwd[index] = 'abd_' + p
    print(pwd)

 

5、小練習

注冊,校驗用戶是否存在,如果用戶不存在就說明可以注冊

users=['大發','冰冰','111']
for i in range(5):
    username=input('請輸入用戶名:')
    # if users.count(username)>0:
    if username in users: #以上兩種方法都可以,in是判斷在不在里面
        print('用戶名已注冊')
    else:
        print('用戶未注冊')
        users.append(username)#將用戶名添加到列表中
        print(users)
        break
else:
    print('輸入次數過多')

 

6、list循環

我們來做一個小練習:使用循環去掉奇數,只留下偶數。


(1)循環的錯誤方法

# 錯誤方法舉例:如果用下面何種方法去做,下標會錯誤,刪除時會導致一些元素被跨過
l=[1,1,1,2,3,4,5]

for i in l:
    if i%2!=0:#取余不為0,說明是奇數
        l.remove(i)
print(l)
# [1, 2, 4]

 

(2)循環的正確方法

# 正確方法:復制一個list,循環l2,從l1里面刪,這樣就不會出錯了,因為2的下標沒有錯亂
l=[1,1,1,2,3,4,5]
l2=[1,1,1,2,3,4,5]
for i in l2:
    if i%2!=0:
        l.remove(i)
print(l)
# [2, 4]

(3)深拷貝、淺拷貝
當字符串很長很大的時候,直接手動復制list很費勁,那我們可以使用深拷貝的方法,下面我們看看深拷貝和淺拷貝的區別

#淺拷貝,兩個變量的內存地址是一樣的,這種方法循環刪除文件是不行的,會相互影響
l=[1,1,1,2,3,4,5]
l2=l
l2=l.copy()

# 深拷貝,是兩個內存地址。復制一個list的意思
import copy
l2=copy.deepcopy(l)

#打印內存地址看一下深拷貝后兩個的內存地址是不是變啦
print(id(l))
print(id(l2))

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM