列表及元組基礎知識

print的補充與格式化字符串

print()在help後返回的幫助文件

>>> help(print)
Help on built-in function print in module builtins:

print(...)
    print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)
    # ...表示 其他傳入值 value2、value3...
    Prints the values to a stream, or to sys.stdout by default.
    Optional keyword arguments:
    file:  a file-like object (stream); defaults to the current sys.stdout.
     #將內容打印的地方默認爲當前窗口 可以在txt等其他允許的文件打印 
    sep:   string inserted between values, default a space.
    #set表示value之間的間隔輸入的元素,默認爲空格
    >>> print (1,2,3,4,5,sep='!')
    >>>1!2!3!4!5
    end:   string appended after the last value, default a newline.
    >>> for i in range(4):
	      print(i,end='#')
    >>> 0#1#2#3#    
    #end表示在打印完所有value之後再追加打印一個元素,默認爲換行(\n)
    flush: whether to forcibly flush the stream.
    #是否刷新數據流 Ture後即爲及時顯示(輸入1個字符即顯示)

字符串的格式

  • %號格式化
name='Bob'
age=13
print('His name is %s,his age is %d.'%(name,age))
print('His name is ',name,',his age is ',age,',',sep='')
print('His name is '+name+',his age is '+str(age)+',')
結果
His name is Bob,his age is 13.
His name is Bob,his age is 13.
His name is Bob,his age is 13.

  • 佔位符
格式 描述
%d 有符號的整數
%s 字符串
%c 字符及ASCII碼
%o 無符號八進制整數
%x(X) 無符號十六進制整數
%e(E) 浮點數,科學計數(10的多少次冪)
%f 浮點數

注:如當需要使用%打印’100%'時

print('%d%%'%100) #此時'%%’表示一個%,前面的%表示轉譯字符,用\會報錯
100%

format格式化

1.位置映射

print('name:{},age:{}'.format('tom',18))
結果
name:tom,age:18

2.關鍵字映射

print('name:{},age:{},adress:{address}'.format('tom',18,address='China'))
結果
name:tom,age:18,adress:China #注作爲關鍵字的內容必須放在format最後面

3.對應元素映射

print('第一個:{0[0]},第二個:{0[1]},第三個:{0[2]}'.format(('aaa','bbb','ccc')))
結果
第一個:aaa,第二個:bbb,第三個:ccc
print('第一個:{0[0]},第二個:{1[1]},第三個:{0[2]}'.format(('aaa','bbb','ccc'),('111','222')))
結果
第一個:aaa,第二個:222,第三個:ccc

列表

1.格式:

​ 用[ ]括起來的一組元素,元素之間以’,'間隔

​ 可以存儲多種數據類型

2.特點:

​ 是有序的,元素可以重複,是一個可變類型

3.創建:

  • 創建空列表:

    l=[ ]

  • 創建多元素列表:

    l=[1,1,2,3,‘aa’,{ },(1,2),[‘a’,‘b’]]

  • 類型強轉:

    str1='hello'
    li=list(str1)
    print(li,type(li))
    結果
    ['h', 'e', 'l', 'l', 'o'] <class 'list'>

4.簡單操作

#####拼接#####
li1=[1,2,3]
li2=[7,7,7]
print(li1+li2)
結果:
>[1, 2, 3, 7, 7, 7]
#####重複#####
li1=[1,2,3]
print(li1*3)
結果
[1, 2, 3, 1, 2, 3, 1, 2, 3]
#####切片#####
>>> li=['a','b','c','d','e','f','g','h']
>>> li[1:5:2]  #取指定範圍指定步長
['b', 'd']
>>> li[::-1]   #取反
['h', 'g', 'f', 'e', 'd', 'c', 'b', 'a']

5.常見操作

  • 增刪改查

    增:append()、extend()、insert()

>>> li1=['name','age']
>>> li2=['city','college']
>>> li1.append(li2) 
>>> li1
['name', 'age', ['city', 'college']]
>>> li1.extend(li2)  #在一個列表(li1)末尾導入另一個列表(li2) 用li1=li1+li2效果相同
>>> li1
['name', 'age', ['city', 'college'], 'city', 'college']
>>> li1.insert(0,'country')	#在指定索引位置插入元素
>>> li1
['country', 'name', 'age', ['city', 'college'], 'city', 'college']  

​ 刪:pop() 、clear()、remove()、del

>>> li=[0,1,2,3,4,5,6,7,8,9]
>>> li.pop()	#取出最後一個元素返回該值,並在原列表中刪除該值
9
>>> li
[0, 1, 2, 3, 4, 5, 6, 7, 8]  #刪除元素後的列表
>>> li.pop(1)     #取出指定索引位置的元素返回該值,並在原列表中刪除該值
1
>>> li
[0, 2, 3, 4, 5, 6, 7, 8] #刪除元素後的列表
>>> li.remove(2)   #從左開始刪除第一個指定的元素(只刪除一個)
>>> li
[0, 3, 4, 5, 6, 7, 8]  #刪除元素後的列表
>>> li.clear()      #將列表所有元素清除,列表將變成一個空列表
>>> li
[]
>>> del li       #將列表整個刪除,列表(li)將消失再調用該列表(li)會報錯
>>> li
Traceback (most recent call last):
  File "<pyshell#26>", line 1, in <module>
    li
NameError: name 'li' is not defined

改:直接根據索引

li=[1,1,1,1,1,1]
>>> li[1]=2  #改指定索引位置的元素
>>> li
[1, 2, 1, 1, 1, 1]
>>> li[2:]=3,4,5,6  #改指定範圍的元素
>>> li
[1, 2, 3, 4, 5, 6]
#注:索引不能超出列表自身範圍,即不能通過索引來爲列表添加新的元素

遍歷:

#####元素遍歷#####
>>> li[2:]=3,4,5,6
>>> li
[1, 2, 3, 4, 5, 6]
>>> li=['a','b','c']
>>> for i in li:
	print(i)	
a
b
c
#####索引遍歷#####
>>> li=['a','b','c']
>>> for i in range(len(li)):
	print(li[i],end=' ')
    
a b c 
#####枚舉遍歷#####
enumerate()  #對於的迭代對象,將其組成一個索引序列,利用該序列,得到索引即對應值
li=['a','b','c']
>>> for i ,j in  enumerate(li):
	print(i,j)
	
0 a
1 b
2 c
  • 計數:count(),查找某元素的次數

  • 反轉:reverse(),將整個列表反轉

  • 排序:sort(),將列表排序

    >>> li=[1,1,2,35,7,1]
    >>> li.count(1)   #統計元素(1)出現的次數
    3
    >>> li.reverse() #反轉
    >>> li
    [1, 7, 35, 2, 1, 1]
    >>> li.sort()   #排序,升序(必須是同種數據類型)
    >>> li
    [1, 1, 1, 2, 7, 35]
    >>> li.sort(reverse=True)  #排序,降序(必須是同種數據類型)
    >>> li
    [35, 7, 2, 1, 1, 1]

6列表解析式(生成式)

格式:[表達式 for 迭代元素 in 可迭代對象 (其他條件)]

實現原理:

迭代[可迭代對象]中的每一個元素,每迭代一次的結果賦值給對應的迭代元素,再通過表達式的運算得到一個新的值,最後通過所有表達式計算的值(可以再通過其他條件篩選)以一個列表的形式返回。

li=[x for x in range(10)]
>>> li
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

>>> li=[x for x in range(10) if x%2==0]
>>> li
[0, 2, 4, 6, 8]
>>> sr='今天是晴天'
>>> li=[ord(x) for x in sr]
>>> li
[20170, 22825, 26159, 26228, 22825]

賦值與拷貝

賦值:對對象的引用

>>> ls=[1,2,3,4]
>>> lf=ls
>>> print(id(ls),id(lf))
60164536 60164536

拷貝:淺拷貝與深拷貝

  • 淺拷貝會創建新的對象,內容是對原對象的引用

    三種實現方法:

    切片操作[:]

    工廠函數 list(li)

    copy模塊內的copy函數

la=[1,2,3,'a']
#####切片操作[:]#####
lb=la[:]
print(id(la),id(lb))
print(la==lb)
print(la is lb)
結果
21644752 21645912
True
False
#####copy函數#####
import copy
lb=copy.copy(la)
print(id(la),id(lb))
print(la==lb)
print(la is lb)
結果
56305144 56241928
True
False
#####工廠函數#####
lb=list((la))
print(id(la),id(lb))
print(la==lb)
print(la is lb)
結果
21972432 23277360
True
False
  • 深拷貝
import copy
la=[1,2,3,'a']
lb=copy.deepcopy(la)
print(id(la),id(lb))
print(la==lb)
print(la is lb)
淺拷貝與深拷貝的差別
  • 淺拷貝相當於我們只拷貝了一層,修改外層元素,會修改引用,讓它們指向另一個位置;修改嵌套列表的元素,列表地址沒有發生變化,指向的還是同一個位置。
  • 深拷貝拷貝對象的所有元素,包括多層嵌套的元素,因此是開闢了一個新的內存存儲區,和數據源沒有關係了
>>>import copy
>>>a = [1, 2, 3, 4, ['a', 'b', 'c']]
>>> b = a
>>> c = copy.copy(a)
>>> d = copy.deepcopy(a)
>>> id(a)
19276104
>>> id(b)
19276104
>>> id(c)
19113304
>>> id(d)
19286976
>>> a.append(5)    #操作1對一層數據操作
>>> a[4].append('hello')   #操作2對深層數據操作
>>> a
[1, 2, 0, 4, ['a', 'b', 'c', 'hello'], 5]
>>> b
[1, 2, 0, 4, ['a', 'b', 'c', 'hello'], 5]
>>> c
[1, 2, 3, 4, ['a', 'b', 'c', 'hello']]
>>> d
[1, 2, 3, 4, ['a', 'b', 'c']]

其他

三目運算符

a=1
b=1
a+=2 if a<2 else b-1
print(a,b)
3 1

列表生成式

(與列表.6相似)

a=[1,2,3]
b=['a','b','c']
li=[[i,j] for i in a for j in b]
print(li)
結果
[[1, 'a'], [1, 'b'], [1, 'c'], [2, 'a'], [2, 'b'], [2, 'c'], [3, 'a'], [3, 'b'], [3, 'c']]

元組

特點

有序、元素可以重複,不可更改對象。 符號: ( )

創建方法

  • 空元組的創建

  • 單元素元祖的創建

>>> tu=()
>>> type(tu)
<class 'tuple'>
>>> tu=('a')
>>> type(tu)
<class 'str'>
>>> type(tu)
<class 'str'>
>>> tu=('a',)  #單元素元元組創建時必須再加一個','不然會默認是字符串
>>> type(tu)
<class 'tuple'>
  • 多元素元祖的創建(可以包含多種數據類型)
  tu=(1,2,3)  #創建單元素元組
  tu2=(4,5,6)
  print(tu+tu2)  #元組的拼接
  print(tu*3)    #元組的重複
  print(tu[1:],tu[0])  #元組的切片及索引
  結果
  (1, 2, 3, 4, 5, 6)
  (1, 2, 3, 1, 2, 3, 1, 2, 3)
  (2, 3) 1

切片查、索引查、index()

>>> tp=(1,2,3,4,5,6,'a','b')
  >>> tp[2:]  #切片查
  (3, 4, 5, 6, 'a', 'b')
  >>> tp[4]   #索引查
  5
  >>> tp.index('a')  
  6
  >>> del tp   #刪除整個列表
  >>> tp
  Traceback (most recent call last):
    File "<pyshell#22>", line 1, in <module>
      tp
  NameError: name 'tp' is not defined

注:由於元組爲不可變類型,所以不能進行增、刪元素的操作。但是可以將整個元組刪除del。

>>> tp=(1,2,3,4,5,6,'a','b')
>>> del tp   #刪除整個列表
>>> tp
Traceback (most recent call last):
  File "<pyshell#22>", line 1, in <module>
    tp
NameError: name 'tp' is not defined
tu=(1,2,3)
print(id(tu))
del tu
tu=(1,2,3)
print(id(tu))   ###垃圾回收機制,其他類型有相似效果
結果
23988864
23988864

遍歷

元素遍歷
索引遍歷
枚舉遍歷 ennumerate

tup=(1,2,3,4,5,'a')
for i in tup:
    print(i,end=' ')
print()
for i in range(len(tup)):
    print(tup[i],end=' ')
print()
for i,j in enumerate(tup):
    print(i,j,'|',end=' ')
結果
1 2 3 4 5 a 
1 2 3 4 5 a 
0 1 | 1 2 | 2 3 | 3 4 | 4 5 | 5 a |
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章