可以使用“+”運(yùn)算符將元素添加到列表中。
>>>aList=[3,4,5]
>>>aList=aList+[7]
>>>aList
[3,4,5,7]
嚴(yán)格意義上來(lái)講,這并不是真的為列表添加元素,而是創(chuàng)建了一個(gè)新列表,并將原列表中的元素和新元素依次復(fù)制到新列表的內(nèi)存空間。由于涉及大量元素的復(fù)制,該操作速度較慢,在涉及大量元素添加時(shí)不建議使用該方法。
使用列表對(duì)象的append()方法在當(dāng)前列表尾部追加元素,原地修改列表,是真正意義上的在列表尾部添加元素,速度較快。
>>>aList.append(9)
>>>aList
[3,4,5,7,9]
所謂“原地”,是指不改變列表在內(nèi)存中的首地址。
python采用的是基于值的自動(dòng)內(nèi)存管理方式,當(dāng)為對(duì)象修改值時(shí),并不是真的直接修改變量的值,而是使變量指向新的值,這對(duì)于Python所有類(lèi)型的變量都是一樣的。
>>>a=[1,2,3]
>>>id(a)#返回對(duì)象的內(nèi)存地址
20230752
>>>a=[1,2]
>>>id(a)
20338208
列表中包含的是元素值的引用,而不是直接包含元素值。
如果是直接修改序列變量的值,則與Python普通變量的情況是一樣的
如果是通過(guò)下標(biāo)來(lái)修改序列中元素的值或通過(guò)可變序列對(duì)象自身提供的方法來(lái)增加和刪除元素時(shí),序列對(duì)象在內(nèi)存中的起始地址是不變的,僅僅是被改變值的元素地址發(fā)生變化,也就是所謂的“原地操作”。
>>>a=[1,2,4]
>>>b=[1,2,3]
>>>a==b
False
>>>id(a)==id(b)
False
>>>id(a[0])==id(b[0])
True
>>>a=[1,2,3]
>>>id(a)
25289752
>>>a.append(4)
>>>id(a)
25289752
>>>a.remove(3)
>>>a
[1,2,4]
>>>id(a)
25289752
>>>a[0]=5
>>>a
[5,2,4]
>>>id(a)
25289752
使用列表對(duì)象的extend()方法可以將另一個(gè)迭代對(duì)象的所有元素添加至該列表對(duì)象尾部。通過(guò)extend()方法來(lái)增加列表元素也不改變其內(nèi)存首地址,屬于原地操作。
>>>a.extend([7,8,9])
>>>a
[5,2,4,7,8,9]
>>>id(a)
25289752
>>>aList.extend([11,13])
>>>aList
[3,4,5,7,9,11,13]
>>>aList.extend((15,17))
>>>aList
[3,4,5,7,9,11,13,15,17]
使用列表對(duì)象的insert()方法將元素添加至列表的指定位置。
>>>aList.insert(3,6)#在下標(biāo)為3的位置插入元素6
>>>aList
[3,4,5,6,7,9,11,13,15,17]
應(yīng)盡量從列表尾部進(jìn)行元素的增加與刪除操作。
列表的insert()可以在列表的任意位置插入元素,但由于列表的自動(dòng)內(nèi)存管理功能,insert()方法會(huì)引起插入位置之后所有元素的移動(dòng),這會(huì)影響處理速度。
類(lèi)似的還有后面介紹的remove()方法以及使用pop()函數(shù)彈出列表非尾部元素和使用del命令刪除列表非尾部元素的情況。
importtime
defInsert():
a=[]
foriinrange(10000):
a.insert(0,i)
defAppend():
a=[]
foriinrange(10000):
a.append(i)
start=time.time()
foriinrange(10):
Insert()
print('Insert:',time.time()-start)
start=time.time()
foriinrange(10):
Append()
print('Append:',time.time()-start)
上面代碼運(yùn)行結(jié)果如下:
Insert:0.578000068665
Append:0.0309998989105
使用乘法來(lái)擴(kuò)展列表對(duì)象,將列表與整數(shù)相乘,生成一個(gè)新列表,新列表是原列表中元素的重復(fù)。
>>>aList=[3,5,7]
>>>bList=aList
>>>id(aList)
57091464
>>>id(bList)
57091464
>>>aList=aList*3
>>>aList
[3,5,7,3,5,7,3,5,7]
>>>bList
[3,5,7]
>>>id(aList)
57092680
>>>id(bList)
57091464
當(dāng)使用*運(yùn)算符將包含列表的列表重復(fù)并創(chuàng)建新列表時(shí),并不是復(fù)制子列表值,而是復(fù)制已有元素的引用。因此,當(dāng)修改其中一個(gè)值時(shí),相應(yīng)的引用也會(huì)被修改。
>>>x=[[None]*2]*3
>>>x
[[None,None],[None,None],[None,None]]
>>>x[0][0]=5
>>>x
[[5,None],[5,None],[5,None]]
>>>x=[[1,2,3]]*3
>>>x[0][0]=10
>>>x
[[10,2,3],[10,2,3],[10,2,3]]
以上內(nèi)容為大家介紹了python列表元素的增加,希望對(duì)大家有所幫助,如果想要了解更多Python相關(guān)知識(shí),請(qǐng)關(guān)注IT培訓(xùn)機(jī)構(gòu):千鋒教育。