-
?
有時候,一維list并不能滿足所有的要求(上述所有list均為一維list),這個時候需要二維list甚至更高維的list。
?
在一個list里面,包含list,得到的就是一個二維list,對于二維list,列表里面的每一個元素仍然是一個列表。
?
比如:
Alice最近的三次成績分別是[100, 89, 92]
?Bob最近的三次成績分別是[70, 65, 81]
?Candy最近的三次成績分別是[88, 72, 77]
如果需要用一個列表存放三個同學的成績,則需要這樣:
?
?
alice_scores = [100, 89, 92]
bob_scores = [70, 65, 81]
candy_scores = [88, 72, 77]
all_scores = [alice_scores, bob_scores, candy_scores]
print(all_scores) # ==> [[100, 89, 92], [70, 65, 81], [88, 72, 77]]?
?
?
如果需要從二維list all_scores獲取Bob最近第三次考試的成績,可以這樣寫。
其中
①all_scores[1]得到bob_scores :Bob的最近三次成績列表 [70,65,81];
②再通過下標[2]:則可以得到Bob第三次的成績81。
?
?
alice_scores = [100,89,92]
bob_scores = [70,65,81]
candy_scores = [88,72,77]
all_scores = [alice_scores, bob_scores, candy_scores]
score = all_scores[1][2] # ==> 81?
?
?
任務
有三個長方體,他們的長寬高分別是[1, 2, 3], [5, 3, 2], [7, 3, 2],定義在數組L中,L = [[1, 2, 3], [5, 3, 2], [7, 3, 2]],請分別求出三個長方體的表面積。
?
# coding: utf-8
L = [[1, 2, 3], [5, 3, 2], [7, 3, 2]]
n = 0
for i in L:??? #for循環語句中,i可以是元素,也可以是list
??? n += 1
??? area = (i[0] * i[1] + i[0] * i[2] + i[1] * i[2]) * 2
??? print("第{}個長方體的表面積為{}".format(n,area))
?
?
?
?
思路混亂——
# Enter a code
#coding=utf-8
A = [0,0,0]
surface=[0,0,0]
L = [[1, 2, 3], [5, 3, 2], [7, 3, 2]]
?
#A=L[1]
#B=L[2]
#C=L[3]
?
i=0
j=0
?
?
for i in range(2):
??? for j in range(2):
??????? A[j]=L[i][j]
??? surface[i]=A[0]*A[1]*A[2]
??? print('長方體面積是{}'.format(surface[i]))
???
?
?
?
?
?
查看全部 -
?
names=['Alice', 'Bob', 'Candy', 'David', 'Ellena']
?
grade=[89, 72, 88, 79, 99]
?
for i in range(4):
?
??? for j in range(i+1,5):
?
??????? if grade[j]>grade[i]:
?
??????????? a[i]=names[i],names[i]=names[j],names[j]=a[j]????? #python是直接交換,例如:i,j=j,i,再例如i,j,k=k,i,j
?
??????????? b[i]=grade[i],grade[i]=grade[j],grade[j]=b[j]
?
print(names)
?
?
?
?
?
任務
班上某次考試,['Alice', 'Bob', 'Candy', 'David', 'Ellena'] 的成績分別是 89, 72, 88, 79, 99,請按照成績高低,重新排列list中同學名字的順序。
?
names=['Alice', 'Bob', 'Candy', 'David', 'Ellena']
?
grade=[89, 72, 88, 79, 99]
?
for i in range(4):
?
??? for j in range(i+1,5):
?
??????? if grade[j]>grade[i]:
?
??????????? names[i],names[j]=names[j],names[i]
?
??????????? grade[i],grade[j]=grade[j],grade[i]
?
print(names)
?
?
?
?
?
?
查看全部 -
?
① pop()方法:可以使用列表的pop()方法,默認刪除列表的最后一個元素,并返回值?!?gt;有返回值的函數,應該有接收返回值的語句,a=pop(()
用法:listname.pop()
?
L = ['Alice', 'Bob', 'Candy', 'David', 'Ellena']
name = L.pop()?? #pop函數有返回值,應該寫接收返回值的語句
print(name) # ==> Ellena
print(L) # ==> L = ['Alice', 'Bob', 'Candy', 'David']?
?
② pop():還可以接收一個參數,指定需要刪除的元素的位置。
用法:listname.pop(num), num是要刪除元素的位置(從左往右計數)
?
L = ['Alice', 'Bob', 'Candy', 'David', 'Ellena']
name = L.pop(1)
print(name)
print(L)
?
?
?
注意:多個pop()語句使用時,pop()按照順序執行,前面的語句執行后,會即時改變listname列表,后面的語句在執行的是上一個語句執行后的新列表。
?
?
任務
L = ['Alice', 'Bob', 'Candy', 'David', 'Ellena'],由于Candy,David依次轉學,某同學寫出以下代碼,請判斷以下代碼是否可以正常運行?如果不可以,為什么?請幫忙修正。
?
?
?
?
?
?
?
查看全部 -
Python中,list提供了一系列的方法可以讓我們操作list中的元素,其中也包含了添加元素的方法。
?
①append()方法:只能增加一個新元素,且增加位置是列表的末尾
append語法:listname.append('xxx')
?
names = ['Alice', 'Bob', 'David', 'Ellena']
names.append('Candy')
print(names)
?
?
?
②insert()方法:插入新元素,可以指定插入的位置(位置是從0開始數)
?
insert()語法:listname.insert(num,'xxx'),需要兩個參數,分別是需要插入的位置num,以及需要插入的元素'xxx'。
?
names = ['Alice', 'Bob', 'David', 'Ellena']
names.insert(2, 'Candy')
print(names) # ==> ['Alice', 'Bob', 'Candy', 'David', 'Ellena']?
?
?
?
任務
班上已有同學['Alice', 'Bob', 'Candy', 'David', 'Ellena'],新來報到3名同學分別是'Zero', 'Phoebe', 'Gen',請綜合利用append()方法,insert()方法,把三個同學的名字按首字母順序插入到列表里去。
?
names1=['Alice','Bob','Candy','David','Ellena']
names2=['Gen','Phoebe','Zero']
?
for item in names2:
??? names1.append(item)
?
print(names1)
?
?
?
Extend的用法:extend() 函數用于在列表末尾,一次性追加另一個序列中的多個值(用新列表擴展原來的列表)。
?
?
?
查看全部 -
?
Python的列表,除了支持正向順序索引獲取列表中的每一個元素以外,也支持倒序訪問list中的每一個元素。
?
①倒序 [ - num ] 索引單個元素——在Python中,可以使用 -1 來表示最后一個元素,-2 表示倒數第二個元素,依次類推。
?
注意:倒敘索引如果越界,也會報錯?
?
②倒序 [ -big num : -small num ]切片索引——左開右閉,
?
L=[95.5, 85, 59, 66, 72]
L.sort(reverse=True)????? #
M=L[-4:-1]???? ??#倒序索引,左開右閉,不包括 -4 位置的元素
print(M)
?
?
PS. 切片原則——無論是順序還是倒序,切片都是按從左到右算。差別在于順序是左閉右開,倒序是左開右閉。
?
?
?
查看全部 -
?
①[ num ] 索引訪問list單個元素:由于列表list是一個有序的容器,所以在list里面,每一個元素都有一個唯一的位置,我們稱之為索引(index),這和字符串是類似的,可以通過中括號 [ ] 來按位置訪問list對應的元素。
?
注意,這里要注意區分,列表的定義也是通過中括號 [ ] 來定義的,但這和通過索引訪問列表里面的元素并不沖突
?
names = ['Alice', 'Bob', 'David', 'Ellena']
print(names[0])
print(names[1])
print(names[2])
print(names[3])?
?
list index out of range索引訪問列表溢出——由于names只有四個元素,所以我們最多只能通過索引3訪問到最后一個元素。如果print(names[4]),會引起Python運行的錯誤。
注意:在使用索引的方式訪問列表時,一定要特別注意不要越界。
?
?
?
?
②[ a:b ] 切片索引訪問list多個元素:左閉右開,和字符串切片類似
?
names = ['Alice', 'Bob', 'David', 'Ellena']
sub_names = names[0:2]
print(sub_names)?
切片訪問溢出——
如果我們越界切片的話,不會出現Python運行錯誤,但是按照這樣的下標去切片,獲取不到任何元素。
?
?
?
任務
五名同學的成績可以用一個list表示:L = [95.5, 85, 59, 66, 72],請按照索引的方式分別打印出第一名、第二名、第三名。
?
L=[95.5, 85, 59, 66, 72]
L.sort(reverse=True)??????? #sort是升序排序,reverse=True是降序排序
M=L[0:3]????? #從0到2,不包括3位置的元素
print(L)
print(M)
?
?
?
?
?
?
查看全部 -
?
列表是有序的,因此我們可以按順序訪問列表中的元素。
?
L = ['Alice', 66, 'Bob', True, 'False', 100]
for item in L:
??? print(item)?
?
使用for循環,訪問列表中的每一個元素——和使用for循環,訪問字符串中的每一個字符,是非常類似的。事實上字符串也可以看作是一種特殊的列表,它只能按順序存放多個字符。
?
?
迭代——通過for循環訪問列表每一個元素的方式,我們稱為迭代。
?
?
?
例題:請使用迭代的方式按順序輸出列表 L = ['Alice', 66, 'Bob', True, 'False', 100] 的偶數位置的元素。(列表中位置是從0開始)
①
L = ['Alice', 66, 'Bob', True, 'False', 100]
num=0
for a in L:
? ??if num % 2==0:
??????? print(a)
??? num=num+1? #不管循環條件是否滿足,都會執行的語句
?
②
L=['Alice',66,'Bob','True','False',100]
n=0
?
while n<6:
? ??if n%2==0:
??????? print(L[n])
??? n=n+1
?
?
?
?
?
PS.? list中的元素是從0開始的
?
?
?
?
查看全部 -
生活中,容器指的是可以容納物品的收納器.
?
容器定義——在程序中,容器是一種可以把多個元素放在一起的數據結構,容器中的元素可以逐個地迭代獲取,可以用in, not in等關鍵字判斷某個元素是否包含在容器中。
?
容器種類——在Python中,包括列表(list)、元組(tuple)、字典(dict)、集合(set)等,他們都可以放入多個元素,因此都可以算作是容器,這些容器是Python編程中非常重要的數據結構,我們接下來重點學習這些數據結構。
?
?
?
list
?
列表(list)定義——是一種有序容器,放入list中的元素將會按照一定順序排列。構造list的方法非常簡單,使用中括號 [ ] 把需要放在容器里面的元素括起來,就定義了一個列表。
?
list可以同時放入多種數據類型——list可以放入數字、字符串等數據類型,list不對放入其中的類型進行判斷,也就是說,list可以同時放入任意類型的數據,這是Python這門語言決定的,因為Python是動態語言。
例如:L = ['Alice', 66, 'Bob', True, 'False', 100]
?
?
For v in L:? ——> v可以是字符串,也可以是整型,都可以輸出
?
?
?
?
?
?
查看全部 -
?
像多層if-else嵌套一樣,python的循環也支持嵌套。
我們使用兩層嵌套循環輸出字符串'ABC'中每個字符和字符串'123'每個字符的排列。
?
s1 = 'ABC'
s2 = '123'
for x in s1:
??? for y in s2:
??????? print(x+y)
?
在上述代碼中,對于外層循環,外層每循環1次,內層就會循環3次。
?
?
?
多層嵌套循環語法——
①
If…:
??? abcd
else:
????? ?if…:
??????? efgh
??? else:
?????? ghij
?
?
②
for a in test1:
??? for b in test2:
??????? for c in test3:
??????????? print(a+b+c)
?
?
?
?
?
?
?
查看全部 -
使用continue,我們可以控制循環繼續下去,并跳過continue后面的邏輯
?
continue和if條件語句結合,continue放在if條件語句的執行語句最后一行,當在參數符合條件在if內循環時,continue控制繼續循環,不執行continue下面語句;當不符合條件、跳出循環時,執行continue下面語句。
?
s = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
num = 1
for ch in s:
??? if num < 10:
??????? num = num + 1
??? ????continue
???
??? print(ch)
??? num = num + 1
?
?
?
?
s = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
num = 1
for ch in s:
??? if num < 10:
??????? num = num + 1?
??? #? 缺少continue情況下,會輸出什么呢?
?
??? print('number is{},char is {}'.format(num,ch))
??? num = num + 1
?
?
?
?
①
i=0
sum=0
while i<1001:
??? if i%2==0:
??????? sum=sum+i
??????? i=i+1
??? else:
??????? i=i+1
???
print(sum)
?
②
i=0
sum=0
while i<1001:
??? if i%2==0:
??????? sum=sum+i
??
??? i=i+1
???
print(sum)
?
?
③
num=0
sum=0
while num<1001:
?? ?if num%2=1:
??????? num=num+1
??????? continue
??? sum=sum+num
??? num=num+1
?
print(sum)
?
查看全部 -
While True——if跳出條件-break——循環語句:用 for 循環或者 while 循環時,如果要在循環體內直接退出循環,可以使用 break 語句。
?
我們使用break跳出循環,也可以求出1~100的和。
num = 1
sum = 0
while True:? #True循環
? ? if num > 100: #跳出條件
? ? ? ? break
? ? sum = sum + num? #循環語句
? ? num = num + 1? #循環語句,控制跳出條件
print(sum)?
?
?
對于字符串s = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',假如希望輸出s的前20個字符,而不是所有字符,我們也可以使用break。
s = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
num = 1
for ch in s:
?? ?if num > 20:
??????? break
??? print(ch)
??? num = num + 1
?
?
s = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
num = 1
while True:
?? ?if num > 20:
??????? break
??? ch=s[num-1]
??? print(ch)
??? num = num + 1
?
?
?
查看全部 -
注意——縮進問題:編寫python代碼時要格外注意縮進,對齊對應的邏輯
?
#coding=utf-8
num=1
multiple=1
?
while num<=10:
??? multiple=multiple*num
??? num=num+1
???
print(multiple)
?
查看全部 -
for循環在Python語言的流程控制中是非常重要的,在編程中有很多場景需要使用到for循環。舉個例子,當我們需要把字符串中的每一個字符打印出來的時候,我們怎么實現呢?
?
for語法:for v in list,(來自 <http://www.xianlaiwan.cn/qadetail/349017> )
?
?
s = 'ABCD'
for ch in s:
? ? print(ch) ??# 注意縮進?
在上述代碼中,ch是在for循環中定義的,意思是把字符串s中的每一個元素依次賦值給ch,然后再把ch打印出來,直到打印出字符串s的最后一個字符為止。--------> for ch in s:
?
?
?
?
班里考試后,老師要統計幾位同學的平均成績,已知5位同學的成績用list表示如下:
L = [75, 92, 59, 68, 99]
請利用for循環計算出平均成績。
?
?
代碼如下:
#coding=utf-8
?
L=[75,92,59,68,99]
sum=0?? # sum變量初始化???? #初始化不能放在循環內,要放在循環之前?!?gt;否則,得到的是 (0+99)/5=19.8
?????????????? #sum =0,定義為整數型——>在py2中,得到的ave也是整數型(取商)——>在py3中,得到的是浮點型(精確值)
?????????????? #sum =0.0,定義為浮點型——>在py2中,得到的ave也是浮點型
?
for a in L:
??? sum=sum+a
???
ave=sum/5
print('平均成績是{}'.format(ave))
?
?
PS. template.format()——如果想同時輸出 整數型和字符型、文字型等兩種以上數據類型,應該是采用template.format()調用函數
?
?
注意——沒有條件for循環,只有for v in range(a:b)增強循環
python是沒有條件for循環的,只有增強for循環
for?s?in?range(1,100): s介于1-100之間時,循環,大于100跳出循環
?
?
?
查看全部 -
可以使用if-elif-else語句來簡化邏輯,避免多個if-else語句嵌套。其中elif就是else if的意思。
PS.
嵌套過多,代碼將會縮進越來越多,代碼邏輯看起來也不夠清晰。
?
特別注意: 無論是if-else還是if-elif-else語句,一系列條件判斷會從上到下依次判斷,如果某個判斷為 True,執行完對應的代碼塊,后面的條件判斷就直接忽略,不再執行了。
?
age = 16
if age >=18:
??? print('adult')
elif age<3:
??? print('baby')
elif age<=6:
??? print('kid')
elif age<18:
??? print('teenager')
?
?
注意:elif語句后要加冒號
?
?
查看全部 -
?
通過條件判斷,選擇做什么樣的邏輯(當然,邏輯是需要我們提前寫好的),我們稱之為條件分支判斷
?
#coding=utf-8
age = 19
if age>=18:
??? print('今年{}歲'.format(age))
輸出結果:今年19歲
?
?
year = '今年 {} 歲'
age = 19
if age >= 18:
? ? print(year.format(age))
輸出結果:今年19歲
?
?
?
?
注意—— #coding=utf-8:在python2版本中,若有中文,需要頭部寫入 #coding=utf-8?
?
?
?
1,if條件后的選擇要縮進四格:可以看到print('今年{}歲') 這行代碼明顯比上一行代碼縮進了,這是因為這行代碼是if判斷的一個子分支,因此需要縮進,在Python規范中,一般使用4個空格作為縮進
2.if條件后加冒號:在if語句的最后,有一個冒號: ,這是條件分支判斷的格式,在最后加入冒號:,表示接下來是分支代碼塊
?
?
?
If-else分支判斷:
在else中,同樣需要冒號;
其次是縮進,在else的子邏輯分支,同樣需要縮進。
查看全部
舉報