可以使用“+”運(yùn)算符將元素添加到列表中。
>>>aList=[3,4,5]
>>>aList=aList+[7]
>>>aList
[3,4,5,7]
嚴(yán)格意義上來講,這并不是真的為列表添加元素,而是創(chuàng)建了一個新列表,并將原列表中的元素和新元素依次復(fù)制到新列表的內(nèi)存空間。由于涉及大量元素的復(fù)制,該操作速度較慢,在涉及大量元素添加時不建議使用該方法。
使用列表對象的append()方法在當(dāng)前列表尾部追加元素,原地修改列表,是真正意義上的在列表尾部添加元素,速度較快。
>>>aList.append(9)
>>>aList
[3,4,5,7,9]
所謂“原地”,是指不改變列表在內(nèi)存中的首地址。
python采用的是基于值的自動內(nèi)存管理方式,當(dāng)為對象修改值時,并不是真的直接修改變量的值,而是使變量指向新的值,這對于Python所有類型的變量都是一樣的。
>>>a=[1,2,3]
>>>id(a)#返回對象的內(nèi)存地址
20230752
>>>a=[1,2]
>>>id(a)
20338208
列表中包含的是元素值的引用,而不是直接包含元素值。
如果是直接修改序列變量的值,則與Python普通變量的情況是一樣的
如果是通過下標(biāo)來修改序列中元素的值或通過可變序列對象自身提供的方法來增加和刪除元素時,序列對象在內(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
使用列表對象的extend()方法可以將另一個迭代對象的所有元素添加至該列表對象尾部。通過extend()方法來增加列表元素也不改變其內(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]
使用列表對象的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()可以在列表的任意位置插入元素,但由于列表的自動內(nèi)存管理功能,insert()方法會引起插入位置之后所有元素的移動,這會影響處理速度。
類似的還有后面介紹的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
使用乘法來擴(kuò)展列表對象,將列表與整數(shù)相乘,生成一個新列表,新列表是原列表中元素的重復(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)建新列表時,并不是復(fù)制子列表值,而是復(fù)制已有元素的引用。因此,當(dāng)修改其中一個值時,相應(yīng)的引用也會被修改。
>>>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列表元素的增加,希望對大家有所幫助,如果想要了解更多Python相關(guān)知識,請關(guān)注IT培訓(xùn)機(jī)構(gòu):千鋒教育。