MaDi's Blog

一個紀錄自己在轉職軟體工程師路上的學習小空間

0%

Python迭代語法

Table of Contents:

  1. next
  2. enumerate
  3. Collection

next

1
next(iterable[, default])

iterable : 可迭代的對象

default : optinal,用來設置在沒有下一個元素時的默認值,如果不設置,又沒有下一個元素時,則會觸發StopIteration錯誤。

1
2
3
4
5
6
7
it = iter([1, 2, 3, 4, 5]) #一定要用iter包住,不能直接用list
while True:
try:
x = next(it) #取得下一個值
print(x)
except StopIteration: #觸發error才會停止
break

1
2
3
4
5

enumerate

同時回傳迭帶物件的index與value

1
enumerate(sequence, [start=0])

sequence: 可迭代的物件

start: optional,決定index起算的值

1
2
seasons = ['Spring', 'Summer', 'Fall', 'Winter']
list(enumerate(seasons))

[(0, ‘Spring’), (1, ‘Summer’), (2, ‘Fall’), (3, ‘Winter’)]

1
2
seasons = ['Spring', 'Summer', 'Fall', 'Winter']
list(enumerate(seasons,2)) #設定起算index=2

[(2, ‘Spring’), (3, ‘Summer’), (4, ‘Fall’), (5, ‘Winter’)]

1
2
3
4
5
seasons = ['Spring', 'Summer', 'Fall', 'Winter']

#用在迴圈,同時有index跟value
for i,element in enumerate(seasons):
print(i,element)

0 Spring
1 Summer
2 Fall
3 Winter

Collection

常用的有以下幾個:

namedtuple: 可以用名稱的方式去訪問tuple元組型態的資料,增加程式可讀性

1
2
3
4
5
6
7
8
from collections import namedtuple

point = namedtuple('point', ['x','y','z'])
p = point(1,2,3)

print(p.x) # 1
print(p.y) # 2
print(p.z) # 3

Counter: 好用的計數器

1
2
3
4
5
6
7
from collections import Counter

s = "我為人人,人人為我"
c = Counter(s) # Counter({'我': 2, '為': 2, '人': 4, ',': 1})

# 回傳頻率最高的前三個字
c.most_common(3) # [('人', 4), ('我', 2), ('為', 2)]

defaultdict: 預設容器內盛裝資料型態的dict

1
2
3
4
5
6
7
8
9
10
11
12
from collections import defaultdict

lst = [1, -2, 3, -4, 5, 6,-7, -8, -9]

# 建立預設是裝list資料型態的dict
dd = defaultdict(list) # defaultdict(list, {})

for i in lst:
key = 'pos' if i>0 else 'neg'
dd[key].append(i)

# defaultdict(list, {'pos': [1, 3, 5, 6], 'neg': [-2, -4, -7, -8, -9]})

參考