for
สร้างลิสต์ใหม่ที่ดึงข้อมูลลิสต์เดิมที่ไล่ตำแหน่งจากท้ายมาหัว เช่น
a = ['ก','ข','ค','ง','จ']
b = [a[4-i] for i in range(len(a))]
print(b) # ['จ', 'ง', 'ค', 'ข', 'ก']
.reverse
a = ['ก','ข','ค','ง','จ']
a.reverse()
print(a) # ได้['จ', 'ง', 'ค', 'ข', 'ก']
.reversed
อย่างไรก็ตามฟังก์ชันนี้ไม่ได้ให้ผลเป็นลิสต์
a = ['ก','ข','ค','ง','จ']
print(reversed(a)) # ได้
list_reverseiterator
ซึ่งเป็นอิเทอเรเตอร์ (iterator) ชนิดหนึ่ง เวลาสั่งให้แสดงผลจะไม่สามารถเห็นผลได้ทันทีfor
ได้เหมือนกับลิสต์ ละจะเห็นว่าตำแหน่งถูกสลับจากหลังมาหน้าจริงๆ
for i in reversed(['ก','ข','ค','ง','จ']):
print(i,end=' ')
# ได้ จ ง ค ข ก
list(reversed(('ก','ข','ค','ง','จ'))) #ได้ ['จ', 'ง', 'ค', 'ข', 'ก']
tuple(reversed(('ก','ข','ค','ง','จ'))) # ได้ ('จ', 'ง', 'ค', 'ข', 'ก')
for
เพื่อไล่หาค่าน้ำหนักของตัวที่มากที่สุดดู
mupa = [50.9,89.3,62.7,101.2,70.4,129.3,94.9] #น้ำหนักหมูป่า 7 ตัว
mmax = mupa[0] # ตั้งค่าสูงสุดเริ่มต้น
i = 0 # ลำดับของค่าสูงสุดเริ่มต้น
for m in mupa: # ทำการวนซ้ำตามจำนวนในลิสต์
if(m>mmax): # ถ้ามากกว่าค่าสูงสุดเดิม
mmax = m # ให้เปลี่ยนเป็นค่านั้น
imax = i # และเปลี่ยนลำดับด้วย
i += 1
print('ตัวที่ %d หนักสุด หนัก %.1f กก.'%(imax,mmax))
ตัวที่ 5 หนักสุด หนัก 129.3 กก.
max
print(max(mupa)) # ได้ 129.3
min
print(min(mupa)) # ได้ 50.9
index
เพื่อหาว่าตัวที่ตำแหน่งไหนมีค่าเป็นค่าสูงสุด
print(mupa.index(max(mupa))) # ได้ 5
หรือเขียนแบบนี้ก็ได้
print(max(mupa, key=mupa.index)) # ได้ 5
การใช้เมธอด index
นี้เหมือนกับ index
ที่ใช้กับสายอักขระซึ่งอธิบายไปในบทที่แล้ว แต่ลิสต์จะไม่มี rindex
และไม่มี find
กับ rfind
ด้วยfor
ไล่สมาชิกทีละตัวแล้วให้บวกไปเรื่อยๆ
x = [124.3,45.4,34.5,199.8,444.3,322.2,401.1]
ruam = 0
for s in x:
ruam +=s
print(ruam) # ได้ 1571.6
chalia = ruam/len(x)
print('ค่าเฉลี่ยเท่ากับ %.2f'%chalia) # ได้ ค่าเฉลี่ยเท่ากับ 224.51
sum
สามารถใช้เพื่อหาผลรวมและค่าเฉลี่ยได้ดังนี้
print(sum(x)) # ได้ 1571.6
print(sum(x)/len(x)) # ได้ 224.5142857142857
0
จากนั้นใช้ for
วนเพื่อตรวจว่าสมาชิกแต่ละตัวตรงกับค่าที่ต้องการหรือไม่ ถ้าตรงก็บวกเพิ่มไปเรื่อยๆ2
กี่ตัวในลิสต์ w
w = [1,2,1,2,2,2,1,2,2,1,1,1,1,2,1,1,2,2]
nap = 0
for b in w:
if(b==2): nap += 1
print(nap) # ได้ 9
.count
เช่นเดียวกับที่ใช้ในสายอักขระ
print(w.count(2)) # ได้ 9
x = [35,24,30,17,15,6,8,2]
for i in range(len(x)-1): # ทำซ้ำไป len(x)-1 ครั้ง
for j in range(len(x)-i-1): # ทำซ้ำโดยไล่ตั้งแต่ j เป็น 0 ไปจนถึง j เป็น len(x)-i-2
if(x[j]>x[j+1]): # ถ้าตัวซ้ายมากกว่าตัวขวาให้สลับ
x[j],x[j+1] = x[j+1],x[j]
print(x)
[24, 30, 17, 15, 6, 8, 2, 35]
[24, 17, 15, 6, 8, 2, 30, 35]
[17, 15, 6, 8, 2, 24, 30, 35]
[15, 6, 8, 2, 17, 24, 30, 35]
[6, 8, 2, 15, 17, 24, 30, 35]
[6, 2, 8, 15, 17, 24, 30, 35]
[2, 6, 8, 15, 17, 24, 30, 35]
.sort
x = [35,24,30,17,15,6,8,2]
x.sort()
print(x) # ได้ [2, 6, 8, 15, 17, 24, 30, 35]
reverse
เข้าไปเป็น reverse=True
(หรือใช้ 1
แทน True
ก็ได้)
x = [35,24,30,17,15,6,8,2]
x.sort(reverse=True)
print(x) # ได้ [35, 30, 24, 17, 15, 8, 6, 2]
sorted
ซึ่งจะคืนค่าลิสต์ที่เรียงแล้ว
x = [35,24,30,17,15,6,8,2]
print(sorted(x)) # ได้ [2, 6, 8, 15, 17, 24, 30, 35]
sorted
ไม่ได้เป็นการแก้ไขตัวลิสต์แต่เป็นการสร้างลิสต์ใหม่โดยใช้สมาชิกของลิสต์เก่ามาจัดเรียงsorted
ได้ แต่ผลที่ไดจะออกมาเป็นลิสต์ ต้องแปลงกลับเป็นทูเพิลอีกที
y = (489,378,112,388,98,14,333)
y = tuple(sorted(y))
print(y) # ได้ (14, 98, 112, 333, 378, 388, 489)
key
ลงไปในฟังก์ชัน sorted
kedma = 'ภถคตจขชฎพฑธรณนยญบฐลฃฅฟหฆกฏดฌษสศวซงผปฉอฮทมฒฬฝ'
a = ['ก','ข','ค','ฆ','ง','จ','ฉ','ช','ซ']
print(sorted(a,key=kedma.index))
['ค', 'จ', 'ข', 'ช', 'ก', 'ซ', 'ง', 'ฉ']
ติดตามอัปเดตของบล็อกได้ที่แฟนเพจ