【Python】Python - 的List Comprehension。List Comprehension
List Comprehension
List comprehension 提供較短的語法,當您需要在現存的list 中建立新的list。
offers a shorter syntax when you want to create a new list based on the values of an existing list.
範例:
基於list中的水果,你可能只需要包含"a"開頭的水果名。
如果使用正常的for 迴圈來處理,程式碼可能會有判斷式在迴圈內,如下:
範例
fruits = ["apple", "banana", "cherry", "kiwi", "mango"]
newlist = []
for x in fruits:
if "a" in x:
newlist.append(x)
print(newlist)
上面輸出: ['apple', 'banana', 'mango']
如果使用 list comprehension 你只需要輸入1行程式碼就可完成上面的工作:
範例
fruits = ["apple", "banana", "cherry", "kiwi", "mango"]
newlist = [x for x in fruits if "a" in x]
print(newlist)
語法
newlist = [expression for item in iterable if condition == True]
回傳值會是新宣告在記憶體中的新的list,而舊的list的內容不會改變。
Condition
The condition如同是過濾器,只會加入 True
狀態的資料items。
範例
Only accept items that are not "apple":
newlist = [x for x in fruits if x != "apple"]
上面輸出: ['banana', 'cherry', 'kiwi', 'mango']
上面的 condition為 if x != "apple" 所以會列出所有的水果,除了名為apple的之外。
而 condition也可以不指定,如下所示:
範例
With no if
statement:
newlist = [x for x in fruits]
上面輸出: ['apple, 'banana', 'cherry', 'kiwi', 'mango']
在List Comprehension使用迭代
可以迭代任何的 iterable object, 如list, tuple, set ...等等.
範例
你可使用 range()
方法來建立迭代:
newlist = [x for x in range(10)]
上面輸出: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
下面範例與上面相同,但有判斷式:
範例
只列出小於 5的數列:
newlist = [x for x in range(10) if x < 5]
上面輸出: [0, 1, 2, 3, 4]
Expression
The expression 在回傳時可自定義回傳的結果 。
範例
設定一個新的 list to 接收大寫的水果名稱:
newlist = [x.upper() for x in fruits]
上面輸出:['APPLE', 'BANANA', 'CHERRY', 'KIWI', 'MANGO']
你可以設定任何你想要的 outcome:
範例
將新的list內所有 items都填入 'hello':
newlist = ['hello' for x in fruits]
上面輸出: ['hello', 'hello', 'hello', 'hello', 'hello']
The expression 也可包含狀態, 不像過濾器, 但這也是個維護outcome的方法:
範例
如果遇到香蕉則回傳值改為橘子:
newlist = [x if x != "banana" else "orange" for x in fruits]
上面輸出: ['apple', 'orange', 'cherry', 'kiwi', 'mango']
上面範例的expression的說明如下:
如果不是banaba則回傳,如果是banana則回傳orange。
留言
張貼留言