1. 程式人生 > >python學習-基礎-高階特性

python學習-基礎-高階特性

高階特性
print(list(range(1, 100, 2)))

  1. 切片
#切片 字串,物件,陣列都可以使用
print(list(range(1, 100, 2)))
list1 = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack']
# 取陣列前n個元素 0 - (n-1), 取出前3個元素,如果第一個索引是0,還可以省略:
print(list1[:3])
print(list1[1:3])
print(list1[-2:-1])

list2 = list(range(1, 100))
# 取前10個,每隔2個取一個
print(list2[:10:2])
# 所有數,戈2個取一個
print(list2[::2])
# 這樣會直接複製一個list
list3 = list2[:]
# print(list3)
# 去除左右空格
def trim (s):
	while s[:1] == ' ':
		s = s[1:]
		trim(s)
	while s[-1:] == ' ':
		s = s[0:-1]
		trim(s)
	return s
  1. 迭代 for in
#迭代 for in
# 物件,陣列,字串都可以
# 物件 如果要同時迭代key和value,可以用for k, v in d.items() , 如果要迭代value,可以用for value in d.values()
# 陣列,如果想要下標,可以使用enumerate函式: for i, value in enumerate(['A', 'B', 'C']):
# 判斷是否可以迭代
from collections import Iterable
isinstance('abc', Iterable) # str是否可迭代
isinstance([1,2,3], Iterable) # list是否可迭代
isinstance(123, Iterable) # 整數是否可迭代

# 迭代陣列 返回tuple
for x, y in [(1, 1), (2, 4), (3, 9)]:
	print(x, y)
# 查詢最大最小的值
def findMinAndMax(L):
	if not L:
		return(None, None)
	max = min = L[0]
	for n in L:
		if max < n:
			max = n
		if min > n:
			min = n
		return (min, max)
	
  1. 列表生成式
 # 生成[1x1, 2x2, 3x3, ..., 10x10]怎麼做
# list4 = []
# for x in range(1, 11):
# 	list4.append(x * x)
# 或者
list4 = [ x * x for x in range(1, 11)]
print(list4)
# 兩層迴圈
print([m + n for m in 'ABC' for n in 'XYZ'])

# for迴圈後面還可以加上if判斷,這樣我們就可以篩選出僅偶數的平方:
#[x * x for x in range(1, 11) if x % 2 == 0]
# 列出當前目錄下所有檔案和目錄
# d = {'x': 'A', 'y': 'B', 'z': 'C' }
# for k, v in d.items():
# print(k, '=', v)
# [k + '=' + v for k, v in d.items()] 生成陣列
# L = ['Hello', 'World', 'IBM', 'Apple']
# [s.lower() for s in L]
import os
print([d for d in os.listdir('.')])

# 請修改列表生成式,通過新增if語句保證列表生成式能正確地執行:
list5 = ['Hello', 'World', 18, 'Apple', None]
list6 = [x.lower() for x in list5 if isinstance(x, str)]
print(list6)
  1. 生成器 generator
# 生成器 generator。
# 如果列表元素可以按照某種演算法推算出來,那我們是否可以在迴圈的過程中不斷推算出後續的元素呢?這樣就不必建立完整的list,從而節省大量的空間。在Python中,這種一邊迴圈一邊計算的機制,稱為生成器
g1 = (x * x for x in range(10))
print(g1)
print(next(g1))
print(next(g1))
# 正確的方式,應該使用for迴圈
for n in g1:
	print(n)
# 
# 斐波拉契數列 generator函式
def fib(max):
	n, a, b = 0, 0, 1
	while n < max:
		#print(b)
		yield b
		# 賦值語句:
		a, b = b, a + b
		n = n + 1
	return 'done'
# 普通函式直接呼叫
# fib(6)
# 生成器函式 for 迴圈, 不然只能通過next函式一次一次的呼叫,如果呼叫次數多了,會報錯
for n in fib(6):
	print(n)

# 楊輝三角
def triangles(n):
	l = [1]
	while True:
		yield l
		# 第一次中間是空陣列
		l = [1] + [l[x] + l[x + 1] for x in range(len(l) - 1)] + [1]
		if len(l) > n:
			break
for linevalue in triangles(10):
	print(linevalue)

  1. 迭代器
# 迭代器
#  for迴圈的資料型別有以下幾種: 
#  一類是集合資料型別,如list、tuple、dict、set、str等;
#  一類是generator,包括生成器和帶yield的generator function。
#  這些可以直接作用於for迴圈的物件統稱為可迭代物件:Iterable。
# 可以使用isinstance()判斷一個物件是否是Iterable 列舉物件:
from collections import Iterable, Iterator

print(isinstance([], Iterable))
isinstance({}, Iterable)
isinstance('abc', Iterable)
print(isinstance((x for x in range(10)), Iterable))

# # 可以被next()函式呼叫並不斷返回下一個值的物件稱為迭代器:Iterator。
# # 可以使用isinstance()判斷一個物件是否是Iterator物件:
print(isinstance((x for x in range(10)), Iterator)) # True
print(isinstance([], Iterator)) # Flase

# 但是可以通過iter()函式轉為Iterator
print(isinstance(iter([]), Iterator))

# Python的for迴圈本質上就是通過不斷呼叫next()函式實現的
# 首先獲得Iterator物件:
# it = iter([1, 2, 3, 4, 5])
# # 迴圈:
# while True:
#     try:
#         # 獲得下一個值:
#         x = next(it)
#     except StopIteration:
#         # 遇到StopIteration就退出迴圈
#         break
# 等同於
# for x in [1, 2, 3, 4, 5]:
#   pass