รายการ Python

Python มีประเภทรายการในตัวที่ยอดเยี่ยมชื่อว่า "list" ลิเทอรัลของรายการจะเขียนอยู่ภายในวงเล็บเหลี่ยม [ ] รายการจะทำงานคล้ายกับสตริง โดยใช้ฟังก์ชัน len() และวงเล็บเหลี่ยม [ ] เพื่อเข้าถึงข้อมูล โดยมีองค์ประกอบแรกอยู่ที่ดัชนี 0 (ดูเอกสารรายการ python.org อย่างเป็นทางการ)

  colors = ['red', 'blue', 'green']
  print(colors[0])    ## red
  print(colors[2])    ## green
  print(len(colors))  ## 3

รายการสตริง "แดง" "น้ำเงิน" "เขียว"

ระบบจะไม่ทำสำเนางานที่มี = on รายการ แต่การกำหนดจะทำให้ตัวแปร 2 ตัวชี้ไปยังรายการเดียวกันในหน่วยความจำ

  b = colors   ## Does not copy the list

ทั้งสีและ b ชี้ไปยังรายการเดียวกัน

"รายการว่างเปล่า" เป็นเพียงวงเล็บคู่เปล่า [ ] เครื่องหมาย "+" จะทำงานเพื่อต่อด้วย 2 รายการ ดังนั้น [1, 2] + [3, 4] จะให้ผลเป็น [1, 2, 3, 4] (ซึ่งเหมือนกับ + พร้อมกับสตริง)

สำหรับและอินเดีย

โครงสร้าง *for* และ *in* ของ Python มีประโยชน์อย่างยิ่ง และการใช้งานครั้งแรกที่เราจะเห็นคือการใช้รายการ โครงสร้าง *for* -- for var in list -- เป็นวิธีง่ายๆ ในการดูแต่ละองค์ประกอบในรายการ (หรือคอลเล็กชันอื่นๆ) อย่าเพิ่มหรือนำออกจากรายการระหว่างการทำซ้ำ

  squares = [1, 4, 9, 16]
  sum = 0
  for num in squares:
    sum += num
  print(sum)  ## 30

หากคุณรู้ว่ามีสิ่งใดอยู่ในรายการ ให้ใช้ชื่อตัวแปรในลูปที่เก็บข้อมูลดังกล่าว เช่น "num", "name" หรือ "url" เนื่องจากโค้ด Python ไม่มีไวยากรณ์อื่นๆ ที่จะแจ้งเตือนคุณเกี่ยวกับประเภท ชื่อตัวแปรจึงเป็นวิธีการหลักสำหรับคุณเพื่อให้ตรงต่อสิ่งที่กำลังเกิดขึ้น (อาจทำให้เข้าใจผิดเล็กน้อย เมื่อรู้จัก Python มากขึ้น คุณจะเห็นการอ้างอิงถึงคำแนะนำประเภทที่ช่วยให้คุณเพิ่มข้อมูลการพิมพ์ลงในคำจำกัดความฟังก์ชันได้ Python จะไม่ใช้คำแนะนำประเภทนี้เมื่อเรียกใช้โปรแกรม โปรแกรมอื่นๆ เช่น IDE (สภาพแวดล้อมในการพัฒนาซอฟต์แวร์แบบผสานรวม) และเครื่องมือวิเคราะห์แบบคงที่ เช่น โปรแกรมตรวจสอบประเภท/โปรแกรมตรวจสอบประเภท เพื่อตรวจสอบว่าเรียกใช้ฟังก์ชันด้วยอาร์กิวเมนต์ที่เข้ากันได้หรือไม่

โครงสร้าง *in* ของตัวมันเองเป็นวิธีง่ายๆ ในการทดสอบว่าองค์ประกอบหนึ่งปรากฏในรายการ (หรือคอลเล็กชันอื่น) หรือไม่ -- value in collection -- ทดสอบว่าค่าอยู่ในคอลเล็กชันหรือไม่ โดยแสดงผลเป็น "จริง"/เท็จ"

  list = ['larry', 'curly', 'moe']
  if 'curly' in list:
    print('yay') ## yay

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

คุณยังใช้ for/in เพื่อทำงานกับสตริงได้ด้วย สตริงดังกล่าวจะทำหน้าที่เหมือนรายการอักขระ ดังนั้น for ch in s: print(ch) จะพิมพ์อักขระทั้งหมดในสตริง

ช่วง

ฟังก์ชันrange(n) จะแสดงผลตัวเลข 0, 1, ... n-1 และช่วง(a, b) จะแสดงผล a, a+1, ... b-1 ไม่เกินตัวเลขสุดท้าย การรวมฟังก์ชัน for-loop และฟังก์ชันrange() จะช่วยให้คุณสร้างตัวเลขดั้งเดิมสำหรับการวนซ้ำได้ ดังนี้

  ## print the numbers from 0 through 99
  for i in range(100):
    print(i)

มีตัวแปร xrange() ที่ช่วยลดค่าใช้จ่ายในการสร้างรายการทั้งหมดสำหรับกรณีที่มีความละเอียดอ่อนด้านประสิทธิภาพ (ใน Python 3 ช่วง() จะมีลักษณะการทำงานของประสิทธิภาพที่ดีและคุณไม่ต้องเสียเวลากับ xrange())

ขณะวนซ้ำ

นอกจากนี้ Python ยังมีการวนรอบแบบมาตรฐาน คำสั่ง *break* และ *continue* ยังทำงานเช่นเดียวกับใน C++ และ Java โดยปรับเปลี่ยนเส้นทางของลูปที่อยู่ด้านในสุด การวนซ้ำ for/in ด้านบนจะช่วยแก้ไขกรณีทั่วไป นั่นคือการทำซ้ำในทุกองค์ประกอบในรายการ แต่การวนซ้ำขณะช่วยให้คุณควบคุมจำนวนดัชนีได้อย่างสมบูรณ์ ต่อไปนี้เป็นการวนซ้ำที่เข้าถึงองค์ประกอบที่ 3 ทุกองค์ประกอบในรายการ

  ## Access every 3rd element in a list
  i = 0
  while i < len(a):
    print(a[i])
    i = i + 3

แสดงรายการเมธอด

วิธีอื่นๆ ที่ใช้กันโดยทั่วไปมีดังนี้

  • list.append(elem) -- เพิ่มองค์ประกอบเดียวที่ส่วนท้ายของรายการ ข้อผิดพลาดที่พบบ่อย: ไม่แสดงรายการใหม่ แต่แก้ไขรายการต้นฉบับ
  • list.insert(index, elem) -- แทรกองค์ประกอบตามดัชนีที่กำหนด และเลื่อนองค์ประกอบไปทางขวา
  • list.extend(list2) จะเพิ่มองค์ประกอบใน list2 ต่อท้ายรายการ การใช้ + หรือ += ในรายการจะคล้ายกับการใช้ Publish()
  • list.index(elem) -- การค้นหาองค์ประกอบที่ระบุจากจุดเริ่มต้นของรายการและแสดงดัชนี จะแสดง ValueError หากองค์ประกอบไม่ปรากฏ (ใช้ "in" เพื่อตรวจสอบโดยไม่มี ValueError)
  • list.remove(elem) -- ค้นหาอินสแตนซ์แรกขององค์ประกอบที่กำหนดและนำออก (จะแสดง ValueError หากไม่มี)
  • list.sort() -- จัดเรียงรายการในตำแหน่ง (ไม่แสดงผล) (แนะนำให้ใช้ฟังก์ชัน Sort() ที่แสดงภายหลัง)
  • list.reverse() -- กลับรายการให้อยู่กับที่ (ไม่แสดงผล)
  • list.pop(index) -- ลบและแสดงผลองค์ประกอบที่ดัชนีที่กำหนด แสดงองค์ประกอบด้านขวาสุดถ้าละเว้นดัชนี (ประมาณตรงกันข้ามกับ append())

โปรดสังเกตว่าคำสั่งเหล่านี้เป็น *methods* ในออบเจ็กต์รายการ ส่วน len() คือฟังก์ชันที่นำรายการ (หรือสตริงหรืออะไรก็ตาม) เป็นอาร์กิวเมนต์

  list = ['larry', 'curly', 'moe']
  list.append('shemp')         ## append elem at end
  list.insert(0, 'xxx')        ## insert elem at index 0
  list.extend(['yyy', 'zzz'])  ## add list of elems at end
  print(list)  ## ['xxx', 'larry', 'curly', 'moe', 'shemp', 'yyy', 'zzz']
  print(list.index('curly'))    ## 2

  list.remove('curly')         ## search and remove that element
  list.pop(1)                  ## removes and returns 'larry'
  print(list)  ## ['xxx', 'moe', 'shemp', 'yyy', 'zzz']

ข้อผิดพลาดที่พบบ่อย: โปรดทราบว่าวิธีการข้างต้นจะไม่ *แสดงผล* รายการที่แก้ไข แต่เป็นเพียงการแก้ไขรายการต้นฉบับเท่านั้น

  list = [1, 2, 3]
  print(list.append(4))   ## NO, does not work, append() returns None
  ## Correct pattern:
  list.append(4)
  print(list)  ## [1, 2, 3, 4]

สร้างรายการ

รูปแบบหนึ่งที่ใช้บ่อยคือการเริ่มรายการเป็นรายการที่ว่างเปล่า [] แล้วใช้ append() หรือexpand() เพื่อเพิ่มองค์ประกอบลงในรายการ

  list = []          ## Start as the empty list
  list.append('a')   ## Use append() to add elements
  list.append('b')

แสดงรายการส่วนแบ่ง

ส่วนต่างๆ ทำงานบนรายการเช่นเดียวกับสตริง และยังใช้เพื่อเปลี่ยนส่วนย่อยของรายการได้ด้วย

  list = ['a', 'b', 'c', 'd']
  print(list[1:-1])   ## ['b', 'c']
  list[0:2] = 'z'    ## replace ['a', 'b'] with ['z']
  print(list)         ## ['z', 'c', 'd']

แบบฝึกหัด: list1.py

หากต้องการฝึกใช้เนื้อหาในส่วนนี้ ให้ลองทำโจทย์ใน list1.py ที่ไม่ใช้การจัดเรียง (ในแบบฝึกหัดพื้นฐาน)