List Comprehension 列表生成式為 Python 內建的,相當強大且簡單就能生成 list
的方法,今天會先介紹一下 loop,再來介紹生成式的各種使用方法。
可以使用 for
loop 來把 list
的每一個元素都跑一遍。
list1 = ['酷哥', '辣妹', '小哥', '小姐']
for x in list1:
print(x)
也可以用 len()
先取出 list
的長度,再用 index 來做
list1 = ['酷哥', '辣妹', '小哥', '小姐']
for x in range(len(list1)):
print(list1[x])
或是使用 while
loop 來做,一樣用 len
取出這個 list
的長度,再根據 index 取值
list1 = ['酷哥', '辣妹', '小哥', '小姐']
i = 0
while i < len(list1):
print(list1[i])
i += 1
如果我想要生成 [1, 2, 3, 4, 5] 的一個 list
,可以使用以下四種方法。
使用 list.append()
函式,來一個一個輸入
a = []
a.append(1)
a.append(2)
a.append(3)
a.append(4)
a.append(5)
print('a =', a)
使用 range
來生成 1 - 5,並用 append
按照迴圈加入 list
當中
b = []
for i in range(1, 6):
b.append(i)
print('b =', b)
使用 range
來生成 1 - 5,並直接用 list()
轉為 list
c = list(range(1, 6))
print('c =', c)
簡化過後可以變為這樣
d = [x for x in range(1, 6)]
print('d =', d)
如果要生成 [1^2, 2^2, 3^2, ..., 10^2]
1 到 10 的平方
a = []
for x in range(1, 11):
a.append(x ** 2)
print('a =', a)
可以把上面的 code 簡化成底下的樣子
b = [x ** 2 for x in range(1, 11)]
print('b =', b)
撰寫升成式時,需要記得要把「要生成的元素」放在前面,後面放 for
loop
在生成式裡面加入判斷條件:只要偶數的平方的話,加一個 if x % 2 == 0
就搞定了
b = [x ** 2 for x in range(1, 11) if x % 2 == 0]
print('b =', b)
雙層生成式
for
前面當作 str
進行撰寫,並用雙層生成式來排列出所有可能性
c = [a + b for a in '123' for b in '456']
print(c)
昨天的文章中有提到用 for
loop 可以一次把 dict
中的整個 item
取出,並放在兩個變數之中,這裡也可以用在列表生成式。
# 昨天的 code
dict2 = {'a':'A', 'b':'B', 'c':'C'}
for x, y in dict2.items():
print(x, y)
dict2 = {'a':'A', 'b':'B', 'c':'C'}
list2 = [x + '=' + y for x, y in dict2.items()]
print(list2)
加上 String Methods 一起使用
list1 = ['apple', 'banana', 'orange']
list2 = [x.capitalize() for x in list1] # 把字串字首變為大寫的函式
print(list2)
list.sort
:排序 list
內的元素list.sort()
預設的 .sort()
是升冪排序的,數字會由小到大,英文字母由 a 到 z
list1 = ['z', 'b', 'zb', 'za', 'osww', 'gegw']
list1.sort()
print(list1)
list2 = [23, 45, 69, 64, 33, 335, 3]
list2.sort()
print(list2)
reverse = True
如果想要降冪排序,則加上 reversr = True
在括號內即可
list1 = ['z', 'b', 'Zb', 'za', 'osww', 'gegw']
list1.sort(reverse = True)
print(list1)
list2 = [23, 45, 69, 64, 33, 335, 3]
list2.sort(reverse = True)
print(list2)
key
:可以自訂你的排列方式
底下的程式為:根據他們的平方大小來排序
def myfunc(x):
return x ** 2
list2 = [-1, -6, 69, 64, -33, 335, 23]
list2.sort(key = myfunc)
print(list2)
若在加上 reverse = True
就可以把輸出改為降冪
def myfunc(x):
return x ** 2
list2 = [-1, -6, 69, 64, -33, 335, 23]
list2.sort(key = myfunc, reverse = True)
print(list2)
待續...