1. 程式人生 > >python-列表生成式

python-列表生成式

  • 需求1.接收變數k,a,b
s = '51 5000 10000'

第一種:
li = []
for item in s.split():
	li.append(int(item))
k,a,b = li
print(k,a,b)

列表生成式:
li=[int(item) for item in s.split()]
print(li)
print(k,a,b)
  • 需求2:
生成一個列表,列表元素分別為[1**1,2**2,3**3,4**4...n*n]

第一種:
li = []
for i in range(1,8):
     li.append(i**i)
print(li)

列表生成式:
li = [i**i for i in range(1,8)]
print(li)
  • [experssion for item in 序列 if 判斷語句]
li = [i ** 2 for i in range(1, 8) if i % 2 == 0]
print(li)
  • 找出1~10之間的所有的偶數
print([i for i in range(1, 11) if i % 2 == 0])
  • 找出1~1000之間的所有質數
def isPrime(num):
    for j in range(2,num):
        if num%j==0 :
            return 1
print([i for i in range(2, 1000) if not isPrime(i)])
  • s1=‘ABC’ s2=‘123’(for巢狀迴圈)
    ‘A1’, ‘A2’, ‘A3’, ‘B1’, ‘B2’, ‘B3’, ‘C1’, ‘C2’, ‘C3’
print([i + j for i in 'ABC' for j in '123'])
  • 列表生成式變形之for迴圈巢狀
    需求:講3x3的矩陣轉換成一堆陣列
    [[1,2,3],[4,5,6],[7,8,9]] ----> [1,2,3,4,5,6,7,8,9]
li = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]

第一種:
resLi = []
for item1 in li:         # [1,2,3] [4,5,6] [7,8,9]
    for item2 in item1:
            resLi.append(item2)
print(resLi)

第二種:列表生成式:
print([item2 for item1 in li for item2 in item1])

第三種:
from  itertools import chain
print(list(chain(*li))) 

列表生成式案例

  • 將列表中所有內容都變成小寫
li = ['dasdaFSDFSFDSF','dadDSADSAsdaDASsadas']
print([i.lower() for i in li])
  • 找出/var/log目錄中,所有以.log結尾的檔名或者目錄名
import os
# print(os.listdir('/var/log'))     ##/var/log/的檔名
print([filename for filename in os.listdir('/var/log') if filename.endswith('.log')])