【Day 14】List Comprehension 列表生成式

前言

List Comprehension 列表生成式为 Python 内建的,相当强大且简单就能生成 list 的方法,今天会先介绍一下 loop,再来介绍生成式的各种使用方法。

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)
    

待续...


<<:  [Day25] Rocket 序列化和反序列化以及 POST (Part 2)

>>:  Day 14:AWS是什麽?30天从动漫/影视作品看AWS服务应用 -《云端情人》part1

第二十八天:UI切版 & 元件-清单表格、弹出视窗

※ 今天的内容 一、清单表格:QTable、QMarkupTable 二、弹出视窗:QDialog、...

Day-15 线性时间演算法 : Bucket sort

bucket sort(桶排序) 假设输入平均分布,也就是输入的阵列每一种组合情况都是机率均等的,平...

D33 - 用 Swift 和公开资讯,打造投资理财的 Apps { 台股申购功能扩充.4 }

处理申购 VC 的资料,是由 StockSubscriptionModel 处理的。 在前面,我们在...

电子书阅读器上的浏览器 [Day09] 支援音量键翻页

虽然 browser 下方的工具列已经添加了上下按钮,可以在不卷动画面的情况下,往下一页或往上一页,...

什麽时候需要ERP系统? 成长中企业资讯孤岛的解方

多数企业营运之初,公司多采用各种独立的简易工具来管理不同的企业流程,例如Excel试算表。但随着业务...