Python基礎12 列表的推導式

2022-06-11 04:39:11 字數 4744 閱讀 2416

本來是和前面的列表內容一塊的

但是加起來**太長,列表推導式就單獨拆分到了這裡來寫

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,求新列表 傳統方法 我們可以新建乙個列表,對原列表進行迴圈操作,計算後的元素寫入新列表 這種寫法,功...