Coding Gun

การทำงานกับ List ใน Python

List vs Array

ในการเขียน python เราจะใช้ list แทนที่ array ซึ่งจะต่างกันตรงที่

วิธีการสร้าง List

การใช้ For loop ในการเข้าถึงสมาชิกแต่ละตัว

การวน loop สมาชิกแต่ละตัวของ list เราจะใช้ loop แบบนี้

numbers = [ 1, 2, 3, 4, 5, 6]
for number in numbers
    print(number)

พื้นฐานการทำงานกับ list ที่คุณต้องรู้จัก

เริ่มต้นจากการประกาศตัวแปร countries ขึ้นมาก่อน

countries = ['Thailand', 'Laos', 'Singapore']

การเข้าถึงสมาชิกแต่ละตัว

เราจะเข้าถึง สมาชิกของ list ด้วย index ที่เริ่มต้นด้วย 0

print(countries[0])
# ผลลัพธ์จะออกมาเป็น Thailand(สมาชิกตัวแรก)

นอกจากนี้เรายังสามารถนับย้อนกลับจากด้านหลังได้ด้วย โดยที่สมาชิกตัวท้ายสุดจะเป็น -1 และไล่ย้อนกลับมาเรื่อยๆ

print(countries[-1])
# ผลลัพธ์จะออกมาเป็น Singapore(สมาชิกตัวแรก)

print(countries[-3])
# ผลลัพธ์จะออกมาเป็น Thailand(นับย้อนกลับมาจากข้างหลัง 3 ตัว)

การใช้ operator in และ not in

การตรวจสอบว่าใน list นั้นมีค่าที่ต้องการอยู่หรือไม่ให้ไช้

"Thailand" in countries
# ผลลัพธ์จะออกมาเป็น True เพราะ Thailand อยู่ใน list

"Qatar" in countries
 # ผลลัพธ์จะออกมาเป็น False เพราะ Qatar ไม่ได้อยู่ใน list

"Qatar" not in countries
 # ผลลัพธ์จะออกมาเป็น True เพราะ Qatar ไม่ได้อยู่ใน list

การค้นหาสมาชิกภายใน list

เราสามารถใช้ method index เพื่อค้นหาว่าใน list นั้นมีค่าที่เราต้องการอยู่ใน index ไหน

position = countries.index('Thailand')

# ค่าของ position จะเป็น 0 เพราะ Thailand เป็นสมาชิกตัวแรกของ list countries

แต่ถ้าค้นหาแล้วพบว่าค่าที่ต้องการไม่ได้อยู่ใน list python จะ throw error ออกมาแบบนี้

position = countries.index('xxx')

เมื่อเรา run บรรทัดนี้ก็จะเกิด ValueError ออกมาแบบนี้

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: 'xxx' is not in list

การเพิ่มสมาชิกเข้าไปใน list

การเพิ่มสมาชิกใหม่เข้าไปใน list เราจะทำได้ 2 วิธีคือ

  1. ใช้ append method เพื่อเพิ่มสมาชิกใหม่เข้าไปต่อท้าย list เดิม แบบนี้
    countries.append('Malaysia')
    
    print(countries)
    # ผลลัพธ์จะออกมาเป็นแบบนี้
    ['Thailand', 'Lao', 'Singapore', 'Malaysia']
    
  2. ใช้ insert method ในกรณีที่คุณต้องการระบุว่าจะให้สมาชิกใหม่เข้าไปวางในตำแหน่งไหน
    # นำสมาชิกใหม่เข้าไปวางไว้ในตำแหน่งแรก index=0
    countries.insert(0, 'Myanmar')
    
    print(countries)
    # ผลลัพธ์จะออกมาเป็นแบบนี้
    ['Myanmar', 'Thailand', 'Lao', 'Singapore', 'Malaysia']
    

นอกจาก method append และ insert แล้วเรายังสามารถนำ list มาต่อกันได้ด้วย operation += และ extend method แบบนี้ก็ได้

a = [1, 2, 3]
b = [4, 5, 6]

# ถ้าต้องการ print ออกมาเฉยๆไม่ได้ต้องการกำหนดค่าให้กับตัวแปรใดให้ใช้
print(a + b)

# ถ้าต้องการนำทั้ง 2 list ไปรวมไว้ในตัวแปร a ให้ใช้
a += b
print(a)

หรือ ถ้าคุณต้องการใช้ extend เพื่อให้อ่านง่ายมากขึ้น เราจะเขียนแบบนี้

a = [1, 2, 3, 4]
a.extend([5, 6, 7])

# ผลลัพธ์จะออกมาเป็น
[1, 2, 3, 4, 5, 6, 7]

การลบสมาชิกออกจาก list

การลบสมาชิกออกจาก list ก็สามารถทำได้ 2 วิธีเช่นเดียวกัน

  1. ใช้ remove method สำหรับการระบุ value ของสมาชิกที่ต้องการลบ
    # ลบ "Laos" ออกจาก countries
    countries.remove('Laos')
    
    print(countries)
    # ผลลัพธ์จะออกมาเป็น
    ['Thailand', 'Singapore']
    
  2. ใช้ del สำหรับการระบุตำแหน่งของสมาชิกที่ต้องการลบ(ไม่สนใจ value ของสมาชิกตัวนั้น)
    # ลบสมาชิกตัวแรกออกจาก list
    del countries[0]
    
    print(countries)
    # ผลลัพธ์จะออกมาเป็น
    ['Laos', 'Singapore']
    

เลือกสมาชิกบางส่วน(Slice)

เราสามารถเลือกสมาชิกบางส่วนของ list ออกมาได้ด้วยการกำหนดค่าของตำแหน่งเริ่มต้นและสิ้นสุดได้ในรูปแบบนี้

python_list[start:stop:]
  1. start ตำแหน่งของ สามาชิกที่ต้องการดึงออกมาเป็นตัวแรก(start)
  2. stop ตำแหน่งสุดท้าย ซึ่งผลลัพธืจะไม่รวมสมาชิกในตำแหน่งนี้(exclude)
  3. stride เราสามารถกำหนด stride เป็น 2 เพื่อนำสมาชิกออกมา ตัว เว้น ตัว หรือจะใส่เป็น -1 เพื่ิอ reverse ผลลัพธ์(กลับจากหลังมาหน้า)ได้
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(numbers[5::])
# ผลลัพธ์จะออกมาเป็น [6, 7, 8, 9, 10]
# ตั้งแต่ index = 5 เป็นต้นไป

print(numbers[2, 5])
# ผลลัพธ์จะออกมาเป็น [3, 4, 5]

print(numbers[::2])
# ผลลัพธ์จะออกมาเป็น [1, 3, 5, 7, 9]

print(numbers[1::2])
# ผลลัพธ์จะออกมาเป็น [2, 4, 6, 8, 10]
# เริ่มต้นที้ 2 เพราะ index = 1

print(numbers[::-1])
# ผลลัพธ์จะออกมาเป็น [10, 9, 8, 7, 6 , 5, 4, 3, 2, 1]

เรียงลำดับสมาชิกภายใน list

เราสามารถจัดเรียงสมาชิกภายใน list ด้วย

print(countries[::-1])

แต่การจัดเรียงแบบนี้จะ__เป็นแค่การแสดงผลเท่านั้น__ แต่ถ้าเราต้องการที่จะจัดเรียงผลลัพธ์ใน list นั้นใหม่(ตัวแปรนั้นจะเปลี่ยนลำดับของสมาชิก) ให้ใช้

print countries
# ['Thailand', 'Laos', 'Singapore']

countries.reverse()

print(countries)
['Singapore', 'Laos', 'Thailand']
# จาก ['Thailand', 'Laos', 'Singapore']
countries.sort()
# หลังจาก sort แล้วจะเป็น ['Lao', 'Singapore', 'Thailand']

# ถ้าต้องการเรียงจากมากไปน้อย(desending) ให้ใช้ reverse=True
countries.sort(reverse=True)
# หลังจาก sort แล้วจะเป็น ['Thailand', 'Singapore', 'Lao']

# ถ้าต้องการเรียง โดยระบุ function เราสามารถกำหนด key เข้าไปได้แบบนี้
# ตัวอย่างนี้ใช้ len() ในการจัดเรียง ผลลัพธ์จจะเรียงจากตัวอักษรที่สั้นที่สุด ไปยาวที่สุด
countries.sort(key=len)
# หลังจาก sort แล้วจะเป็น ['Lao', 'Thailand', 'Singapore']

# เราสามารถกลับเรียงจากตัวอักษรที่ยาวที่สุด ไปหาคำที่สั้นที่สุด ได้แบบนี้
countries.sort(key=len, reverse=True)
# หลังจาก sort แล้วจะเป็น ['Singapore', 'Thailand', 'Lao']

Customize sorting algorithm

เราสามารถเขียนวิธีการเรียงลำดับของเราเองได้ด้วย การนิยาม function ขึ้นมาแบบนี้

def sortSecondChar(e):
    return e[1]

countries.sort(key=sortSecondChar)
# ผลลัพธ์จะออกมาเป็น
['Lao', 'Thailand', 'Singapore']
ซึ่งจะเรียงตามตัวอักษรตัวที่ 2 a, h และ i

ในตัวอย่างนี้ เราจะระบุให้ return สมาชิกตัวที่ 2(index=1) ออกมาเพืื่อนำไปจัดเรียง

สิ่งที่ return ออกมาจะเป็นสิ่งที่นำไปจัดเรียง

Phanupong Permpimol
Follow me