python列表內置辦法
阿新 • • 發佈:2017-11-21
匹配 分享 png ges 補充 真的 序列 bsp 不能
對應操作:
1 查([])
1 2 3 4 5 6 7 8 9 10 |
names_class2 = [ ‘張三‘ , ‘李四‘ , ‘王五‘ , ‘趙六‘ ]
# print(names_class2[2])
# print(names_class2[0:3])
# print(names_class2[0:7])
# print(names_class2[-1])
# print(names_class2[2:3])
# print(names_class2[0:3:1])
# print(names_class2[3:0:-1])
# print(names_class2[:])
|
2 增(append,insert)
insert 方法用於將對象插入到列表中,而append方法則用於在列表末尾追加新的對象
1 2 3 |
names_class2.append( ‘alex‘ )
names_class2.insert( 2 , ‘alvin‘ )
print (names_class2)
|
3 改(重新賦值)
1 2 3 4 5 |
names_class2 = [ ‘張三‘ , ‘李四‘ , ‘王五‘ , ‘趙六‘ ]
names_class2[ 3 ] = ‘趙七‘
names_class2[ 0 : 2 ] = [ ‘wusir‘ , ‘alvin‘ ]
print (names_class2)
|
4 刪(remove,del,pop)
1 2 3 4 |
names_class2.remove( ‘alex‘ )
del names_class2[ 0 ]
del names_class2
names_class2.pop() #註意,pop是有一個返回值的
|
5.1 count
count 方法統計某個元素在列表中出現的次數:
1 2 3 4 5 6 7 |
>>> [ ‘to‘ , ‘be‘ , ‘or‘ , ‘not‘ , ‘to‘ , ‘be‘ ].count( ‘to‘ )
2
>>> x = [[ 1 , 2 ], 1 , 1 , [ 2 , 1 , [ 1 , 2 ]]]
>>> x.count( 1 )
2
>>> x.count([ 1 , 2 ])
1
|
5.2 extend
extend 方法可以在列表的末尾一次性追加另一個序列中的多個值。
1 2 3 4 5 |
>>> a = [ 1 , 2 , 3 ]
>>> b = [ 4 , 5 , 6 ]
>>> a.extend(b)
>>> a
[ 1 , 2 , 3 , 4 , 5 , 6 ]
|
extend 方法修改了被擴展的列表,而原始的連接操作(+)則不然,它會返回一個全新的列表。
1 2 3 4 5 6 7 8 9 10 |
>>> a = [ 1 , 2 , 3 ]
>>> b = [ 4 , 5 , 6 ]
>>> a.extend(b)
>>> a
[ 1 , 2 , 3 , 4 , 5 , 6 ]
>>>
>>> a + b
[ 1 , 2 , 3 , 4 , 5 , 6 , 4 , 5 , 6 ]
>>> a
[ 1 , 2 , 3 , 4 , 5 , 6 ]
|
5.3 index
index 方法用於從列表中找出某個值第一個匹配項的索引位置:
1 |
names_class2.index( ‘李四‘ )
|
5.4 reverse
reverse 方法將列表中的元素反向存放。
1 2 |
names_class2.reverse()
print (names_class2)
|
5.5 sort
sort 方法用於在原位置對列表進行排序。
1 2 |
x = [ 4 , 6 , 2 , 1 , 7 , 9 ]
x.sort() #x.sort(reverse=True)
|
5.6 深淺拷貝
現在,大家先不要理會什麽是深淺拷貝,聽我說,對於一個列表,我想復制一份怎麽辦呢?
肯定會有同學說,重新賦值唄:
1 2 |
names_class1 = [ ‘張三‘ , ‘李四‘ , ‘王五‘ , ‘趙六‘ ]
names_class1_copy = [ ‘張三‘ , ‘李四‘ , ‘王五‘ , ‘趙六‘ ]
|
這是兩塊獨立的內存空間
這也沒問題,還是那句話,如果列表內容做夠大,你真的可以要每一個元素都重新寫一遍嗎?當然不啦,所以列表裏為我們內置了copy方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
names_class1 = [ ‘張三‘ , ‘李四‘ , ‘王五‘ , ‘趙六‘ ,[ 1 , 2 , 3 ]]
names_class1_copy = names_class1.copy()
names_class1[ 0 ] = ‘zhangsan‘
print (names_class1)
print (names_class1_copy)
############
names_class1[ 4 ][ 2 ] = 5
print (names_class1)
print (names_class1_copy)
#問題來了,為什麽names_class1_copy,從這一點我們可以斷定,這兩個變量並不是完全獨立的,那他們的關系是什麽呢?為什麽有的改變,有的不改變呢?
|
這裏就涉及到我們要講的深淺拷貝了:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
#不可變數據類型:數字,字符串,元組 可變類型:列表,字典
# l=[2,2,3]
# print(id(l))
# l[0]=5
# print(id(l)) # 當你對可變類型進行修改時,比如這個列表對象l,它的內存地址不會變化,註意是這個列表對象l,不是它裏面的元素
# # this is the most important
#
# s=‘alex‘
# print(id(s)) #像字符串,列表,數字這些不可變數據類型,,是不能修改的,比如我想要一個‘Alex‘的字符串,只能重新創建一個‘Alex‘的對象,然後讓指針只想這個新對象
#
# s[0]=‘e‘ #報錯
# print(id(s))
#重點:淺拷貝
a = [[ 1 , 2 ], 3 , 4 ]
b = a[:] #b=a.copy()
print (a,b)
print ( id (a), id (b))
print ( ‘*************‘ )
print ( ‘a[0]:‘ , id (a[ 0 ]), ‘b[0]:‘ , id (b[ 0 ]))
print ( ‘a[0][0]:‘ , id (a[ 0 ][ 0 ]), ‘b[0][0]:‘ , id (b[ 0 ][ 0 ]))
print ( ‘a[0][1]:‘ , id (a[ 0 ][ 1 ]), ‘b[0][1]:‘ , id (b[ 0 ][ 1 ]))
print ( ‘a[1]:‘ , id (a[ 1 ]), ‘b[1]:‘ , id (b[ 1 ]))
print ( ‘a[2]:‘ , id (a[ 2 ]), ‘b[2]:‘ , id (b[ 2 ]))
print ( ‘___________________________________________‘ )
b[ 0 ][ 0 ] = 8
print (a,b)
print ( id (a), id (b))
print ( ‘*************‘ )
print ( ‘a[0]:‘ , id (a[ 0 ]), ‘b[0]:‘ , id (b[ 0 ]))
print ( ‘a[0][0]:‘ , id (a[ 0 ][ 0 ]), ‘b[0][0]:‘ , id (b[ 0 ][ 0 ]))
print ( ‘a[0][1]:‘ , id (a[ 0 ][ 1 ]), ‘b[0][1]:‘ , id (b[ 0 ][ 1 ]))
print ( ‘a[1]:‘ , id (a[ 1 ]), ‘b[1]:‘ , id (b[ 1 ]))
print ( ‘a[2]:‘ , id (a[ 2 ]), ‘b[2]:‘ , id (b[ 2 ]))<br><br><br> #outcome
|
# [[1, 2], 3, 4] [[1, 2], 3, 4]
# 4331943624 4331943752
# *************
# a[0]: 4331611144 b[0]: 4331611144
# a[0][0]: 4297375104 b[0][0]: 4297375104
# a[0][1]: 4297375136 b[0][1]: 4297375136
# a[1]: 4297375168 b[1]: 4297375168
# a[2]: 4297375200 b[2]: 4297375200
# ___________________________________________
# [[8, 2], 3, 4] [[8, 2], 3, 4]
# 4331943624 4331943752
# *************
# a[0]: 4331611144 b[0]: 4331611144
# a[0][0]: 4297375328 b[0][0]: 4297375328
# a[0][1]: 4297375136 b[0][1]: 4297375136
# a[1]: 4297375168 b[1]: 4297375168
# a[2]: 4297375200 b[2]: 4297375200
那麽怎麽解釋這樣的一個結果呢?
再不懂,俺就沒辦法啦...
列表補充:
b,*c=[1,2,3,4,5]
python列表內置辦法