φυβλαςのβλογ
บล็อกของ phyblas



ภาษา python เบื้องต้น บทที่ ๘: ข้อมูลชนิดลำดับ
เขียนเมื่อ 2016/03/05 09:38
แก้ไขล่าสุด 2024/02/22 11:01
 

ในบทที่ ๓ ได้แนะนำข้อมูลชนิดต่างๆไปคร่าวๆ แต่ยังไม่ได้กล่าวถึงข้อมูลชนิดกลุ่มซึ่งเป็นรายการที่ประกอบด้วยข้อมูลหลายชนิดมารวมกัน

ข้อมูลลักษณะนั้นมีอยู่หลายชนิดได้แก่ ลิสต์ (list), ทูเพิล (tuple), ดิกชันนารี (dict), เซ็ต (set), เรนจ์ (range) เป็นต้น

ในจำนวนนั้นก็ยังแบ่งเป็นข้อมูลที่มีการเรียงลำดับ และที่ไม่มีการเรียงลำดับ ข้อมูลที่มีการเรียงลำดับจะเรียกว่าเป็นข้อมูลชนิดลำดับ (sequence) ซึ่งได้แก่ ลิสต์, ทูเพิล และเรนจ์

ความจริงแล้วสายอักขระ (str) ก็ถือเป็นข้อมูลชนิดลำดับเช่นกัน ซึ่งก็ได้แนะนำไปพอสมควรแล้ว

ในบทนี้จะมาเรียนรู้เกี่ยวกับพื้นฐานของลิสต์, ทูเพิล และเรนจ์



ลิสต์

ลิสต์คือรายการของข้อมูลซึ่งประกอบไปด้วยข้อมูลหลายตัวมาวางเรียงต่อกันโดยมีลำดับที่แน่นอน ข้อมูลที่เก็บอยู่ในลิสต์จะเป็นชนิดใดก็ได้ และอาจเป็นหลายชนิดปนกันก็ได้

การเขียนลิสต์ทำโดยนำข้อมูลทั้งหมดที่ต้องการให้เป็นสมาชิกมาวางต่อกันแล้วคั่นด้วยจุลภาค , จากนั้นก็ครอบทั้งหมดด้วยวงเล็บเหลี่ยม [ ] เช่น
list_a = [3, 2, 5, 4, 9] # สร้างลิสต์ของจำนวนเต็ม
list_b = [195.1, 129.3, 201.6, 110.5] # สร้างลิสต์ของจำนวนจริง
Cnidaria = ['กัลปังหา', 'ปะการัง', 'ดอกไม้ทะเล', 'แมงกะพรุน'] # สร้างลิสต์ของสายอักขระ
kpkp = [11111, 999.99, 'กกกกก'] # ข้อมูลหลายชนิดปนกัน

ข้อมูลภายในลิสต์นั้นสามารถที่จะแก้ไขเปลี่ยนแปลงเพิ่มเติมได้ภายหลังจากที่สร้างขึ้นมาแล้ว คุณสมบัติข้อนี้คือจุดที่แตกต่างจากทูเพิล



ทูเพิล

คือรายการข้อมูลซึ่งโดยทั่วไปแล้วมีลักษณะเหมือนกับลิสต์ แต่ข้อแตกต่างคือไม่สามารถแก้ไขเปลี่ยนแปลงสมาชิกภายในได้หลังจากที่ถูกสร้างขึ้นมาแล้ว หากอยากแก้ไขมีแต่ต้องสร้างทูเพิลตัวใหม่ขึ้นมาทับ

อย่างไรก็ตามโดยทั่วไปทูเพิลมีข้อดีกว่าลิสต์คือทำงานได้เร็วกว่า ดังนั้นหากมีรายการของข้อมูลที่คิดว่าสร้างขึ้นมาแล้วไม่จำเป็นต้องมีการ แก้ไขเพิ่มเติมอะไรแล้วก็อาจเลือกใช้ทูเพิลแทนลิสต์

การสร้างทูเพิลสามารถทำได้คล้ายลิสต์ เพียงแต่เปลี่ยนจากวงเล็บเหลี่ยมเป็นวงเล็บโค้ง ( )
Mollusca = ('หมึก','ทากเปลือย','หอยฝาเดียว','หอยสองฝา','หอยงวงช้าง','หอยงาช้าง') # สร้างทูเพิลของสายอักขระ

หากทูเพิลมีสมาชิกอยู่เพียงตัวเดียวจะต้องใส่จุลภาพไว้ข้างหลังด้วย
Porifera = ('ฟองน้ำ',)

ทูเพิลกับลิสต์สามารถเปลี่ยนไปมาได้โดยใช้ชื่อคลาสเป็นตัวแปลง เช่น
Cnidaria2 = tuple(Cnidaria) # สร้างทูเพิลขึ้นจากลิสต์ Cnidaria ที่สร้างขึ้นในตัวอย่างข้างต้น
print(Cnidaria2) # ได้ ('กัลปังหา', 'ปะการัง', 'ดอกไม้ทะเล', 'แมงกะพรุน') 

หรือเปลี่ยนจากทูเพิลเป็นลิสต์
Echinodermata = ('ดาวทะเล','ดาวเปราะ','เม่นทะเล','ปลิงทะเล','เหรียญทะเล','พลับพลึงทะเล')
print(list(Echinodermata)) # ได้ ['ดาวทะเล', 'ดาวเปราะ', 'เม่นทะเล', 'ปลิงทะเล', 'เหรียญทะเล', 'พลับพลึงทะเล'] 



เรนจ์

เป็นรายการของข้อมูลตัวเลขจำนวนเต็มที่เรียงกันโดยมีระยะห่างคงที่ เช่น 1,2,3,4,5

การสร้างเรนจ์ทำได้โดยใช้พิมพ์ range() แล้วใส่อาร์กิวเมนต์ลงไป มีอยู่ ๓ รูปแบบในการสร้างโดยแบ่งตามจำนวนอาร์กิวเมนต์ที่ใช้

นั่นคือ ถ้าใส่อาร์กิวเมนต์ตัวเดียว จะได้ค่าที่ไล่ตั้งแต่ 0 โดยบวกทีละ 1 ไปจนถึงค่าก่อนค่านั้น เช่น
r = range(12)

จะได้ค่าไล่เรียงตั้งแต่ 0 ถึง 11 แต่เราไม่สามารถเห็นค่าทั้งหมดนั้นได้โดยการแค่ใช้ print แม้จะพิมพ์ print(r) ก็จะได้ออกมาเป็น range(0, 12)

เราสามารถเห็นค่าสมาชิกทั้งหมดของเรนจ์ได้โดยแปลงเป็นลิสต์หรือทูเพิล
print(list(r)) # ได้ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]

- ถ้าใส่อาร์กิวเมนต์ ๒ ตัว จะได้ค่าที่ไล่ตั้งแต่ค่าตัวซ้ายบวกไปทีละ 1 ไปจนถึงก่อนค่าตัวขวา เช่น
r = range(129,135)
print(tuple(r)) # ได้ (129, 130, 131, 132, 133, 134)

- ถ้าใส่อาร์กิวเมนต์ ๓ ตัว จะได้ค่าที่ไล่ตั้งแต่ตัวซ้ายและเพิ่มขึ้นเท่ากับค่าของตัวขวาไปเรื่อยๆ ไปจนถึงตัวกลาง เช่น
r = range(1000,2000,100)
print(list(r)) # ได้ [1000, 1100, 1200, 1300, 1400, 1500, 1600, 1700, 1800, 1900]

อนึ่ง แม้ว่าเรนจ์แปลงเป็นลิสต์แล้วจะได้ค่าเทียบเท่ากับลิสต์ แต่ก็ถือเป็นออบเจ็กต์คนละชนิดกัน ดังนั้นหากเอามาเปรียบเทียบว่าเท่ากันหรือเปล่าก็จะได้ค่าเป็นเท็จ
print(list(range(1,4)) == [1,2,3]) # ได้ True
print(range(1,4) == [1,2,3]) # ได้ False

แท้จริงแล้วเรนจ์นั้นเป็นออบเจ็กต์ในกลุ่มที่เรียกว่าอิเทอเรเตอร์ (iterator) คือเป็นออบเจ็กต์ที่ไม่ได้เก็บข้อมูลอะไรไว้มากมายแต่เมื่อถูกเรียกใช้มันก็จะสามารถสร้างข้อมูลจำนวนมากขึ้นมาได้

เช่นในกรณีของเรนจ์นั้นจะเก็บแค่อาร์กิวเมนต์ ๓ ตัวคือค่าเริ่มต้น ค่าสุดท้าย แล้วก็ระยะเว้น เพียงเท่านี้เมื่อเรียกใช้มันก็จะให้ค่าตัวเลขที่ไล่เรียงไปทั้งหมดตามที่ต้องการ

***ในไพธอน 2 range เป็นเพียงฟังก์ชันสำหรับสร้างลิสต์ที่เป็นตัวเลขเรียง ไม่ใช่อิเทอเรเตอร์
>>> รายละเอียด



ความยาวของลิสต์, ทูเพิล และเรนจ์

ลิสต์สามารถมีสมาชิกกี่ตัวก็ได้แล้วแต่จะใส่สมาชิกเข้าไป การหาจำนวนสมาชิกในลิสต์ทำได้โดยใช้ฟังก์ชัน len ซึ่งจะคืนค่าความยาว (ซึ่งก็คือจำนวนสมาชิก) ของลิสต์ออกมา
len(['a','e','i','o','u','ä','ö','ü']) # ได้ 8
len(range(1,99,3)) # ได้ 33
chamnuakhi = (1,3,5,7,9,11)
print(len(chamnuakhi)) # ได้ 6

ลิสต์, ทูเพิลและเรนจ์อาจไม่จำเป็นต้องมีสมาชิกอยู่เลยก็ได้ กรณีนี้ความยาวจะเป็น 0
[] # ลิสต์ว่าง
() # ทูเพิลว่าง
range(0, 0) # เรนจ์ว่าง



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

ค่าของสมาชิกแต่ละตัวหาได้โดยพิมพ์ชื่อของลิสต์นั้นตามด้วยเลขลำดับของสมาชิก ใส่ครอบด้วยวงเล็บเหลี่ยม [ ] โดยที่ตำแหน่งแรกเริ่มนับจาก 0 ไม่ใช่ 1 แต่ถ้าหากระบุตัวเลขเกินจำนวนสมาชิกก็จะขัดข้องขึ้นมาทันที
phasa = ['Thai','English','Python','C++','html']
print(phasa[0]) # ได้ 'Thai'
print(phasa[2]) # ได้ 'Python'
print(phasa[5]) # ได้ IndexError: list index out of range

ตัวอย่างนี้สมาชิกมี ๕ ตัว ซึ่งแต่ละตัวชี้ด้วยเลข 0, 1, 2, 3, 4 ดังนั้นถ้าพิมพ์ phasa[5] จึงเกินขอบเขต

อนึ่ง ระวังไว้ว่าวงเล็บเหลี่ยมตอนที่อ้างอิงถึงสมาชิกกับวงเล็บเหลี่ยมตอนที่สร้างลิสต์ถือเป็นคนละเรื่องกัน ต้องไม่สับสน

เลขที่ใส่อาจเป็นจำนวนติดลบได้เช่นกัน กรณีนี้จะนับลำดับเรียงโดย -1 คือตัวสุดท้าย แล้วก็ไล่มาเรื่อยๆ จนติดลบสูงสุดคือเท่ากับจำนวนสมาชิกในลิสต์ ซึ่งจะได้ตัวแรก
print(phasa[-1]) # ได้ 'html'
print(phasa[-5]) # ได้ 'Thai'

ค่าใน [ ] ต้องเป็นจำนวนเต็มเท่านั้น ถ้าใส่จำนวนจริงหรือสายอักขระเข้ามาก็จะขัดข้องทันที
print(phasa[1.0]) # ได้ TypeError: list indices must be integers or slices, not float

หากต้องการแก้ไขข้อมูลก็สามารถทำได้โดยใช้ = เพื่อใส่ค่าใหม่ให้ทันที
phasa[3] = 'C#'
phasa[1] = 'Singlish'
phasa = print(phasa) # ได้ ['Thai', 'Singlish', 'Python', 'C#', 'html'] 

ทูเพิลสามารถเข้าถึงสมาชิกได้ในลักษณะเดียวกับลิสต์ แต่ไม่สามารถแก้
pokemon_red = ('pikachu','fushigibana','nyorobon','kabigon','ptera')
print(pokemon_red[3]) # ได้ 'kabigon'
pokemon_red[0] = 'raichu' # ได้ TypeError: 'tuple' object does not support item assignment



การเข้าถึงสมาชิกทีละหลายตัว

สามารถเข้าถึงสมาชิกภายในลำดับทีละหลายตัวได้โดยใช้โคลอน : หากใส่ตัวเลขวางไว้หน้า : จะหมายความว่าเอาสมาชิกไล่ตั้งแต่ลำดับของเลขนั้นไปจนถึงท้ายลิสต์

หากใส่ตัวเลขวางไว้หลัง : จะหมายความว่าเอาสมาชิกไล่ตั้งแต่ 0 ไปจนถึงก่อนหน้าที่จะถึงเลขนั้น

แต่ถ้าใส่เลขทั้งหน้าและหลัง : จะหมายความว่าเอาสมาชิกตั้งแต่เลขตัวซ้าย ไปจนถึงก่อนเลขตัวขวา

ตัวอย่างเช่น
pokemon = ['fushigidane','hitokage','zenigame','fushigisou','lizardo','kamel','fushigibana','lizardon','kamex']
print(pokemon[:3]) # ได้ ['fushigidane', 'hitokage', 'zenigame']
print(pokemon[6:]) # ได้ ['fushigibana', 'lizardon', 'kamex']
print(pokemon[3:6]) # ได้ ['fushigisou', 'lizardo', 'kamel'] 

ให้ระวังว่าสมาชิกในลำดับของตัวเลขทางซ้าย : จะถูกรวมอยู่ในผลที่ได้ด้วย ในขณะที่สมาชิกทางขวาของ : จะไม่ถูกรวม แต่จะรวมแค่จนถึงก่อนถึงตัวนั้น เช่น [2:5] หมายถึงเอาแค่ 2,3,4 แต่ไม่ได้เอา 5

อนึ่ง กรณีที่เลขทางซ้ายและขวาต่างกันอยู่ 1 จะได้ผลลัพธ์เพียงตัวเดียว เช่น pokemon[3:4] จะได้ 'fushigisou' ตัวเดียวเช่นเดียวกับ pokemon[3]

อย่างไรก็ตามผลที่ได้คือลิสต์ ['fushigisou'] ไม่ใช่แค่สายอักขระ 'fushigisou' เฉยๆ แม้จะมีสมาชิกเพียงตัวเดียวก็ถือว่าเป็นลิสต์ หากจะเข้าถึง 'fushigisou' ก็ต้องพิมพ์ [0] ต่อท้ายอีกทีเป็น pokemon[3:4][0]

กรณีที่มีการใส่ : ตัวที่สอง แล้วมีเลขต่อท้ายอีกตัว เลขตัวนั้นจะเป็นเลขกำหนดขั้นว่าจะโดดข้ามทีละกี่ตัว
print(pokemon[::3]) # ได้ ['fushigidane', 'fushigisou', 'fushigibana']
print(pokemon[1:8:3]) # ได้ ['hitokage', 'lizardo', 'lizardon']
print(pokemon[2::3]) # ได้ ['zenigame', 'kamel', 'kamex']

สำหรับลิสต์แล้วเราสามารถแก้ข้อมูลลงไปได้เลย โดยจำนวนที่มาแทนไม่จำเป็นต้องเท่ากัน เช่น
pokemon[:6] = ['lugia','houou']
print(pokemon) # ได้ ['lugia', 'houou', 'fushigibana', 'lizardon', 'kamex']

ถ้าใส่เป็นลิสต์ว่างไปก็จะเป็นการลบสมาชิกแถวนั้นออกทั้งหมด
pokemon[:2] = []
print(pokemon) # ได้ ['fushigibana', 'lizardon', 'kamex']

แต่ถ้าเป็นทูเพิลกับเรนจ์จะทำได้แต่ดูค่า แต่ไม่สามารถเปลี่ยนแปลงแก้ไขอะไรได้



การเพิ่มสมาชิกในลิสต์

มีหลายวิธีในการเพิ่มสมาชิกในลิสต์ สำหรับการเพิ่มต่อไปในตำแหน่งท้ายสุดอาจทำได้โดยใช้เมธอด .append โดยใส่อาร์กิวเมนต์เป็นตัวที่ต้องการเพิ่มเข้าไป
a = [1,6,44,78,231]
a.append(442)
print(a) # ได้ [1, 6, 44, 78, 231, 442]

แต่หากต้องการเพิ่มตำแหน่งที่ไม่ใช่ท้ายสุดให้ใช้เมธอด .insert โดยอาร์กิวเมนต์ตัวแรกเป็นตำแหน่งที่ต้องการแทรกแล้วค่อยตามด้วยสิ่งที่ต้องการแทรก
a.insert(3,49)
print(a) # ได้ [1, 6, 44, 49, 78, 231] 

หรืออาจใช้ = เพื่อแทรกลงไปในลิสต์ตรงช่วงที่ต้องการได้เช่นกัน
a[3:3] = [49]
print(a) # ได้ [1, 6, 44, 49, 78, 231] 

หากจะเพิ่มที่ตำแหน่งท้ายก็ใส่เลขตำแหน่งสุดท้ายได้
b = ['ผ','ศ']
b[2:2] = ['ด','ร']
print(b) # ได้ ['ผ', 'ศ', 'ด', 'ร']

อีกวิธีหนึ่งที่อาจใช้ก็คือการสร้างลิสต์ใหม่โดยขยายจากลิสต์เก่า เช่น
c = ['á','à','â','ä']
c = c + ['ã']
c += ['ā']
print(c) # ได้ ['á', 'à', 'â', 'ä', 'ã', 'ā']

เฉพาะวิธีสุดท้ายนี้เท่านั้นที่สามารถใช้กับทูเพิลได้ด้วย เพราะไม่ใช่การแก้ของเก่าแต่เป็นการสร้างขึ้นมาใหม่จากของเก่า
c = ('ó','ò','ô','ö')
c = c + ('õ',)
c += ('ō',)
print(c) # ได้ ('ó', 'ò', 'ô', 'ö', 'õ', 'ō')



การลบสมาชิกออกจากลิสต์

นอกจากจะใช้วิธีการแทนที่ส่วนที่ต้องการลบด้วยลิสต์ว่างแล้ว การลบสมาชิกออกจากลิสต์อาจสามารถทำได้โดยใช้เมธอด .remove และ .pop

เมธอด .pop ใช้ลบสมาชิกออกจากลิสต์โดยระบุตำแหน่งของตัวที่ต้องการลบ เช่น
d = ['ú','ù','û','ü','ư','ủ','ũ','ū']
d.pop(4)
print(d) # ได้ ['ú', 'ù', 'û', 'ü', 'ủ', 'ũ', 'ū']

แต่หากไม่ได้ระบุตำแหน่งที่ต้องการลบ ใส่เป็น .pop() เฉยๆจะเป็นการลบตัวสุดท้าย

ส่วน .remove เป็นคำสั่งลบโดยระบุตัวที่ต้องการลบ
d.remove('ủ')
print(d) # ได้ ['ú', 'ù', 'û', 'ü', 'ũ', 'ū'] 

แต่หากตัวที่ต้องการลบนั้นมีอยู่หลายตัว จะเป็นการลบแค่ตัวแรกเท่านั้น ตัวที่เหลือจะยังอยู่
dd = ['u','u','a','u']
dd.remove('u')
print(dd) # ได้ ['u', 'a', 'u']



รายการของรายการของข้อมูล

สมาชิกของลิสต์หรือทูเพิลอาจประกอบไปด้วยลิสต์หรือทูเพิลซ้อนอยู่ภายในก็ได้ กรณีแบบนี้ก็จะเกิดเป็นลิสต์ซ้อนลิสต์หรือทูเพิลซ้อนทูเพิล ตัวอย่างเช่น
m = [['a','b','c'],['d','e','f'],['g','h','j'],['k','l']]
print(m[1]) # ได้ ['d', 'e', 'f']
print(m[1:3]) # ได้ [['d', 'e', 'f'], ['g', 'h', 'j']]
print(m[3]) # ได้ ['k', 'l']

การเข้าถึงสมาชิกของลิสต์ในลิสต์ทำได้โดยการเขียนวงเล็บเหลี่ยมต่อกันสองตัว เช่น
print(m[1][2]) # ได้ f
print(m[1:3][1]) # ได้ ['g', 'h', 'j']
print(m[3][3]) # ได้ IndexError: list index out of range 

ภาพแสดงการเก็บข้อมูลในลิสต์ซ้อนลิสต์



ลิสต์อาจซ้อนเป็นชั้นกี่ชั้นก็ได้ เวลาจะเข้าถึงข้อมูลด้านในก็ต้องใช้วงเล็บเหลี่ยมเขียนต่อกันเป็นจำนวนเท่ากับชั้น



สรุปเนื้อหา
  • ข้อมูลชนิดลำดับได้แก่ ลิสต์, ทูเพิล และเรนจ์
  • ทั้งหมดมีคุณสมบัติเหมือนกันคือเป็นรายการของข้อมูลซึ่งมีลำดับแน่นอน สามารถเข้าถึงข้อมูลภายในได้โดยใช้เลขดัชนีเป็นตัวชี้
  • ลิสต์ต่างจากทูเพิลตรงที่ลิสต์เปลี่ยนแก้ข้อมูลภายในได้แต่ทูเพิลแก้ไม่ได้



อ้างอิง




-----------------------------------------

囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧

ดูสถิติของหน้านี้

หมวดหมู่

-- คอมพิวเตอร์ >> เขียนโปรแกรม >> python

ไม่อนุญาตให้นำเนื้อหาของบทความไปลงที่อื่นโดยไม่ได้ขออนุญาตโดยเด็ดขาด หากต้องการนำบางส่วนไปลงสามารถทำได้โดยต้องไม่ใช่การก๊อปแปะแต่ให้เปลี่ยนคำพูดเป็นของตัวเอง หรือไม่ก็เขียนในลักษณะการยกข้อความอ้างอิง และไม่ว่ากรณีไหนก็ตาม ต้องให้เครดิตพร้อมใส่ลิงก์ของทุกบทความที่มีการใช้เนื้อหาเสมอ

สารบัญ

รวมคำแปลวลีเด็ดจากญี่ปุ่น
มอดูลต่างๆ
-- numpy
-- matplotlib

-- pandas
-- manim
-- opencv
-- pyqt
-- pytorch
การเรียนรู้ของเครื่อง
-- โครงข่าย
     ประสาทเทียม
ภาษา javascript
ภาษา mongol
ภาษาศาสตร์
maya
ความน่าจะเป็น
บันทึกในญี่ปุ่น
บันทึกในจีน
-- บันทึกในปักกิ่ง
-- บันทึกในฮ่องกง
-- บันทึกในมาเก๊า
บันทึกในไต้หวัน
บันทึกในยุโรปเหนือ
บันทึกในประเทศอื่นๆ
qiita
บทความอื่นๆ

บทความแบ่งตามหมวด



ติดตามอัปเดตของบล็อกได้ที่แฟนเพจ

  ค้นหาบทความ

  บทความแนะนำ

ตัวอักษรกรีกและเปรียบเทียบการใช้งานในภาษากรีกโบราณและกรีกสมัยใหม่
ที่มาของอักษรไทยและความเกี่ยวพันกับอักษรอื่นๆในตระกูลอักษรพราหมี
การสร้างแบบจำลองสามมิติเป็นไฟล์ .obj วิธีการอย่างง่ายที่ไม่ว่าใครก็ลองทำได้ทันที
รวมรายชื่อนักร้องเพลงกวางตุ้ง
ภาษาจีนแบ่งเป็นสำเนียงอะไรบ้าง มีความแตกต่างกันมากแค่ไหน
ทำความเข้าใจระบอบประชาธิปไตยจากประวัติศาสตร์ความเป็นมา
เรียนรู้วิธีการใช้ regular expression (regex)
การใช้ unix shell เบื้องต้น ใน linux และ mac
g ในภาษาญี่ปุ่นออกเสียง "ก" หรือ "ง" กันแน่
ทำความรู้จักกับปัญญาประดิษฐ์และการเรียนรู้ของเครื่อง
ค้นพบระบบดาวเคราะห์ ๘ ดวง เบื้องหลังความสำเร็จคือปัญญาประดิษฐ์ (AI)
หอดูดาวโบราณปักกิ่ง ตอนที่ ๑: แท่นสังเกตการณ์และสวนดอกไม้
พิพิธภัณฑ์สถาปัตยกรรมโบราณปักกิ่ง
เที่ยวเมืองตานตง ล่องเรือในน่านน้ำเกาหลีเหนือ
ตระเวนเที่ยวตามรอยฉากของอนิเมะในญี่ปุ่น
เที่ยวชมหอดูดาวที่ฐานสังเกตการณ์ซิงหลง
ทำไมจึงไม่ควรเขียนวรรณยุกต์เวลาทับศัพท์ภาษาต่างประเทศ

บทความแต่ละเดือน

2024年

1月 2月 3月 4月
5月 6月 7月 8月
9月 10月 11月 12月

2023年

1月 2月 3月 4月
5月 6月 7月 8月
9月 10月 11月 12月

2022年

1月 2月 3月 4月
5月 6月 7月 8月
9月 10月 11月 12月

2021年

1月 2月 3月 4月
5月 6月 7月 8月
9月 10月 11月 12月

2020年

1月 2月 3月 4月
5月 6月 7月 8月
9月 10月 11月 12月

ค้นบทความเก่ากว่านั้น

ไทย

日本語

中文