本來是和前面的列表內容一塊的
但是加起來**太長,列表推導式就單獨拆分到了這裡來寫
ps:這是我學習過程中一面學一面嘗試的**,嘗試內容很多,希望理解
1#列表推導式2#
這是個新的東西
3 f=;4#
我們先定義乙個空列表5#
然後我們再寫推導的式子67
for x in range(10):
8if(x%2==0):
10print
(f);11#
這樣的一段**12#
我們就實現了將可以被2整除的資料全部平方然後逐個新增至列表13#
但是其實我們可以把它們簡化到list本身上去
1415 g = [x**2 for x in range(10) if(x%2==0)];16#
list = 輸出表示式 迴圈部分 判斷語句
17print
(g);18#
輸出結果是完全一樣的19#
同理我們還能寫出不一樣的式子
2021 h=[x**2 for x in range(50) if(x%2==0) if(x%5==0)];
22print
(h);23#
這裡我們嘗試後發現24#
前面的是表示式,25#
而在迴圈語句中可以做判定的巢狀26#
這樣一來,可以做多個判斷
2728 i=[x*y for y in range(10) for x in range(10) if(y==10) if(x==2)];
29print
(i);30#
而這裡的輸出結果就是空31#
這是為什麼呢?
32for y in range(10):
33for x in range(10):
34if(y==10):
35if(x==2):
36print(y*x);37#
這段**才是我們想要表達的意思38#
這就這涉及到了for的運算規則了39#
python的for和c中間的是不一樣的40#
y 和 x是作為迭代函式出現的41#
那我們在for巢狀了for 的時候其實y的值是沒有發生傳遞的嗎?42#
這只是一種猜想43#
我們來驗證一下
4445
for y in range(2):
46print("
第乙個y=
",y);
47for x in range(2):
48print("
第二層y=
",y);49#
從輸出的結果來看顯然y的值是發生的傳遞的50#
在for這個大迴圈沒做完之前y作為迭代變數還是存在的
5152
for y in range(10):
53for x in range(10):
54if(y==10):
55print("
y==10啦!");
56if(x==2):
57print("
x==2啦!");
58print(y*x);59#
我們將原來的**改進了一下60#
當y==10的時候就輸出61#
來確保是真的y==1062#
但是顯然沒有得出結果
6364
#我們換個思路65#
我們知道int這樣的數字資料型別是不能作為迭代變數的66#
所以我們可以先測試一下迭代變數的資料型別
6768
for y in range(3):
69print("
y的資料型別是
",type(y));70#
我們發現y的資料型別還是int型71#
那為什麼if()沒執行呢?
7273
#通過監控變數x和y74#
我們發現,其實range(x)是生成存在x元素的列表75#
而且是從0開始的76#
所以這裡的最大值是9 而不是x的10
7778
for y in range(10):
79for x in range(10):
80if(y==9):
81if(x==2):
82print(y*x);83#
所以這樣修改84#
就會得到正確的輸出值
8586
#我們對i清除元素後重新賦值一次
87i.clear();
88 i=[x*y for y in range(10) for x in range(10) if(y==9) if(x==2)];
89print
(i);90#
這次結果就和我們剛剛修改過的資料是一樣的91#
那麼這個可不可以再修改一下呢?
9293
'''94
for y in range(3):
95print("y的值為",y);
96for x in range(3):
97print("x的值為",x);
98if(y==2):
99print("y==2啦!");
100if(x==2):
101print("x==2啦!");
102print(y*x);
103104
'''105
#將其修改成這個樣子
106#
我們對i清除元素後重新賦值一次
107i.clear();
108#
i=[print("x==2啦"); x*y for y in range(3) for x in range(3) if(y==2) if(x==2)];
109#
這裡我們發現,在最後一層的表示式中,只能寫乙個在最前面
110#
因為表示式是要賦值給list中的
111112
#i=[ x*y for y in range(3) print("") for x in range(3) if(y==2) if(x==2)];
113#
所以就算我們在這裡寫了,也是不可以輸出的
114115
#那麼在這個list的運算中,是要為其內部賦值,自然不會讓你輸出東西
116#
但是對本來的變數進行操作時可以的
117#
那麼我們可以實現這些內容嗎
118119
'''120
for y in range(3):
121shuju=shuju+1;
122for x in range(3):
123shuju=shuju+1
124if(y==2):
125shuju=shuju+1;
126if(x==2):
127shuju=shuju+1;
128y*x;
129130
131'''
132133 shuju=0;
134#
i=[ x*y for y in range(3) shuju+=1; for x in range(3) if(y==2) if(x==2)];
135#
任然不行
136#
不能在for中間對其其進行操作
137138
#i=[ x*y for y in range(3) for x in range(3) x=x+y; for z in range(2) if(y==2) if(x==2)];
139#
即使是迭代變數內部的資料也不能在這裡寫改變
140141
#print(i);
142143 i=[ x*y for y in range(3) if(y==2) for x in range(3) if(y==2) if(x==2)];
144print
(i);
145#
但是這裡我們發現
146#
卻可以在中間迴圈區域加上if的判斷語句
147#
我們在這裡加上判斷語句後
148#
程式的結構改變了
149'''
150for y in range(3):
151if(y==2):
152for(x in range(3))
153'''
154#
形成了這樣的結構
155#
這樣來講
156#
每一句話在這裡都是一層判斷
157#
是不存在乙個迴圈或者判斷下寫多個語句的
158159
i.clear();
160#
i=[ x*y for y in range(3) while y<10: for x in range(3) if(y==2) if(x==2)];
161#
從這裡看出while語句也是不可行的
162163
164#
總結出來
165#
列表的推導可以寫多個巢狀和判斷
166#
在迴圈區可以寫多個迴圈
167#
在迴圈區還可以加上判斷
168#
在判斷區也可以寫多個判斷
169#
沒一句**都是一層
170#
表示式只能寫一句話
171#
只能使用for和if
Python高階06 列表推導
列表推導是一種從其他列表建立列表的方式,類似於數學中的集合推導。列表推導的使用方式非常簡單,有點類似於for迴圈。x x for x in range 10 0,1,4,9,16,25,36,49,64,81 如果想列印那些能被3整除的平方值呢?這時候可以在列表推導中新增一條if語句 x x for...
Python自學筆記 11 列表推導
用到函式的乙個常見操作是將其用於乙個列表的所有項,並使用結果來建立乙個新的列表。如果我們要生成list 1,2,3,4,5,6,7,8,9,10 能用哪種方法呢?當然最基礎的方法可以參見列表 上 但是,這種只適合項比較少的一些場景,現在我們要生成1到999的列表怎麼辦呢?list range 1,1...
Python 入門 11 列表推導式
系統 windows 7 語言版本 anaconda3 4.3.0.1 windows x86 64 編輯器 pycharm community 2016.3.2 已知列表x,對列表中每乙個元素 2,求新列表 傳統方法 我們可以新建乙個列表,對原列表進行迴圈操作,計算後的元素寫入新列表 這種寫法,功...