ผลต่างระหว่างรุ่นของ "Python Programming/Lists"

จาก Theory Wiki
ไปยังการนำทาง ไปยังการค้นหา
 
(ไม่แสดง 11 รุ่นระหว่างกลางโดยผู้ใช้ 1 คน)
แถว 22: แถว 22:
 
[False, 'saber', 3, 'archer', 'lancer']
 
[False, 'saber', 3, 'archer', 'lancer']
 
</pre>
 
</pre>
{{Python Programming/Navigation|Tuples|Loops}}
 
  
นอกจากนี้เราสามารถทำ slicing ใช้เครื่องหมายบวก และคูณ list ด้วยจำนวนเต็มได้เหมือนกับ tuple
+
นอกจากนี้เราสามารถเช็คว่าค่าค่าหนึ่งอยู่ใน list, ทำ slicing, ใช้เครื่องหมายบวก, และคูณ list ด้วยจำนวนเต็มได้เหมือนกับ tuple
 
<pre title="interpreter">
 
<pre title="interpreter">
>>> a
+
>>> "saber" in a
[False, 'saber', 3, 'archer', 'lancer']
+
True
 +
>>> 3.1415927 in a
 +
False
 
>>> a[2:5]
 
>>> a[2:5]
 
[3, 'archer', 'lancer']
 
[3, 'archer', 'lancer']
แถว 43: แถว 44:
  
 
== การประมวลผล list ==
 
== การประมวลผล list ==
 +
ไพทอนมีฟังก์ชันสำหรับทำการคำนวณเกี่ยวกับ list ที่สำคัญอยู่สามฟังก์ชัน ได้แก่ <tt>map</tt>, <tt>filter</tt>, และ <tt>reduce</tt>
 +
 +
ฟังก์ชัน <tt>map(f, sequence)</tt> เรียกฟังก์ชัน <tt>f(x)</tt> ที่เรากำหนดโดยมี parameter เป็นสมาชิกของ list <tt>sequence</tt> แล้วสร้าง list ใหม่ซึ่งมีสมาชิกเป็นผลลัพธ์ฟังก์้ชันนั้น
 +
<syntaxhighlight lang="python">
 +
def plusone(x):
 +
    return x+1
 +
</syntaxhighlight>
 +
<pre title="interpreter">
 +
>>> map(plusone, [1,2,3,4,5])
 +
[2, 3, 4, 5, 6]
 +
</pre>
 +
<syntaxhighlight lang="python">
 +
def cube(x):
 +
    return x**3
 +
</syntaxhighlight>
 +
<pre title="interpreter">
 +
>>> map(cube, [-2,-1,0,1,2,100])
 +
[-8, -1, 0, 1, 8, 1000000]
 +
</pre>
 +
 +
ฟังก์ชัน <tt>filter(function, sequence)</tt> เรียกฟังก์ชัน <tt>f(x)</tt> ซึ่งคืนค่าเป็นบูลีน โดยมี parameter เป็นสมาชิกของ list <tt>sequence</tt> แล้วสร้าง list ของสมาชิกทุกตัวที่ฟังก์ชันคืนค่าเป็น <tt>True</tt>
 +
<syntaxhighlight lang="python">
 +
def divisible_by_3(x):
 +
    if x % 3 == 0:
 +
        return True
 +
    else:
 +
        return False
 +
</syntaxhighlight>
 +
 +
<pre title="interpreter">
 +
>>> filter(divisible_by_3, [1,2,3,4,5,6,7,8,9,10,11,12])
 +
[3, 6, 9, 12]
 +
</pre>
 +
<syntaxhighlight lang="python">
 +
def is_prime(x):
 +
    def check_divisible(x, y):
 +
        if y < 2:
 +
            return False
 +
        else:
 +
            if x % y == 0:
 +
                return True
 +
            else:
 +
                return check_divisible(x, y-1)
 +
    if x < 2:
 +
      return False
 +
    else:
 +
      return not check_divisible(x, x-1)
 +
</syntaxhighlight>
 +
<pre title="interpreter">
 +
>>> filter(is_prime, [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20])
 +
[2, 3, 5, 7, 11, 13, 17, 19]
 +
</pre>
 +
 +
ฟังก์ชัน <tt>reduce(f, sequence)</tt> จะเอาสมาชิกสองตัวแรกของ list <tt>sequence</tt> ไปเป็น parameter ของฟังก์ชัน <tt>f</tt> หลังจากนั้นจะเอาผลลัพธ์ที่ได้กับสมาชิกตัวที่สามไปใส่ฟังก์ชัน <tt>f</tt> อีกครั้ง แล้วเอาผลลัพธ์ที่ได้กับสมาชิกตัวที่สี่ไปใส่ฟังก์ชัน <tt>f</tt> อีกครั้ง ไปเรื่อยๆ จนหมด list เสร็จแล้วฟังก์ชัน <tt>reduce</tt> จะคืนค่าที่เป็นผลลัพธ์ของฟังก์ชัน <tt>f</tt> ครั้งสุดท้ายออกมา
 +
<syntaxhighlight lang="python">
 +
def add(x,y):
 +
    return x+y
 +
</syntaxhighlight>
 +
 +
<pre title="interpreter">
 +
>>> reduce(add, [1,5,9,10])
 +
25
 +
>>> reduce(max, [6,0,-5,9])
 +
9
 +
</pre>
 +
 +
== ฟังก์ชัน range ==
 +
ฟังก์ชัน <tt>range(a,b,x)</tt> เป็นฟังก์ขันที่ใช้สร้าง list ที่เก็บตัวเลขที่เรียงกันเป็นลำดับเลขคณิต โดยมันจะสร้าง list ที่มีค่า a, a+x, a+2x, a+3x, ..., a+kx โดยที่ a+kx < b ถ้า x เป็นบวก หรือ a+kx > b ถ้า x เป็นลบ
 +
<pre title="interpreter">
 +
>>> range(1,11,3)
 +
[1, 4, 7, 10]
 +
>>> range(11, 1, -3)
 +
[11, 8, 5, 2]
 +
>>> range(0, 100, 10)
 +
[0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
 +
</pre>
 +
ถ้าเราละเละ x ฟังก์ชัน <tt>range</tt> จะให้ x มีค่าเป็น 1 โดยอัตโนมัติ
 +
<pre title="interpreter">
 +
>>> range(17, 21)
 +
[17, 18, 19, 20]
 +
>>> range(0, 10)
 +
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
 +
</pre>
 +
ถ้าเราเรียกฟังก์ชัน <tt>range</tt> โดยมี parameter เพียงแค่ตัวเดียว เราจะได้ list ของจำนวนเต็มที่ไม่เป็นลบทั้งหมดที่น้อยกว่าค่านั้น เรียงจากน้อยไปมาก
 +
<pre title="interpreter">
 +
>>> range(20)
 +
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
 +
>>> range(5)
 +
[0, 1, 2, 3, 4]
 +
</pre>
 +
{{Python Programming/Navigation|Tuples|Loops}}

รุ่นแก้ไขปัจจุบันเมื่อ 04:09, 4 ตุลาคม 2558

ลิิสต์ (list) เป็นข้อมูลซึ่งแทนลำดับของค่าต่างๆ เหมือน tuple แต่ว่าเราสามารถเปลี่ยนสมาชิกที่ตำแหน่งต่างๆ ของ list ได้ ซึ่งทำให้ลิสต์คล้ายอะเรย์ในภาษา C มากกว่า tuple เราสามารถสร้าง list ได้ด้วยการเขียนลำดับของสมาชิกใน list ภายในวงเล็บก้ามปู

>>> a = [True, "saber", 3.1415927, "archer", "lancer"]
>>> a
[True, 'saber', 3.1415926999999999, 'archer', 'lancer']
>>> b = ['berserker']
>>> b
['berserker']
>>> c = []
>>> c
[]

สังเกตว่าเราสามารถสร้าง list ที่มีสมาชิกตัวเดียว (b) และ list ว่าง (c) ได้โดยไม่ต้องอาศัยไวยากรณ์แบบพิเศษเช่นเดียวกับ tuple

เราสามารถเปลี่ยนสมาชิก ณ ตำแหน่งต่างของ list ได้

>>> a
[False, 'saber', 3.1415926999999999, 'archer', 'lancer']
>>> a[2] = 22/7
>>> a
[False, 'saber', 3, 'archer', 'lancer']

นอกจากนี้เราสามารถเช็คว่าค่าค่าหนึ่งอยู่ใน list, ทำ slicing, ใช้เครื่องหมายบวก, และคูณ list ด้วยจำนวนเต็มได้เหมือนกับ tuple

>>> "saber" in a
True
>>> 3.1415927 in a
False
>>> a[2:5]
[3, 'archer', 'lancer']
>>> a[:-1]
[False, 'saber', 3, 'archer']
>>> a + b
[False, 'saber', 3, 'archer', 'lancer', 'berserker']
>>> b + a
['berserker', False, 'saber', 3, 'archer', 'lancer']
>>> 4*b
['berserker', 'berserker', 'berserker', 'berserker']
>>> 5*c
[]

การประมวลผล list

ไพทอนมีฟังก์ชันสำหรับทำการคำนวณเกี่ยวกับ list ที่สำคัญอยู่สามฟังก์ชัน ได้แก่ map, filter, และ reduce

ฟังก์ชัน map(f, sequence) เรียกฟังก์ชัน f(x) ที่เรากำหนดโดยมี parameter เป็นสมาชิกของ list sequence แล้วสร้าง list ใหม่ซึ่งมีสมาชิกเป็นผลลัพธ์ฟังก์้ชันนั้น

def plusone(x):
    return x+1
>>> map(plusone, [1,2,3,4,5])
[2, 3, 4, 5, 6]
def cube(x):
    return x**3
>>> map(cube, [-2,-1,0,1,2,100])
[-8, -1, 0, 1, 8, 1000000]

ฟังก์ชัน filter(function, sequence) เรียกฟังก์ชัน f(x) ซึ่งคืนค่าเป็นบูลีน โดยมี parameter เป็นสมาชิกของ list sequence แล้วสร้าง list ของสมาชิกทุกตัวที่ฟังก์ชันคืนค่าเป็น True

def divisible_by_3(x):
    if x % 3 == 0:
        return True
    else:
        return False
>>> filter(divisible_by_3, [1,2,3,4,5,6,7,8,9,10,11,12])
[3, 6, 9, 12]
def is_prime(x):
    def check_divisible(x, y):
        if y < 2:
            return False
        else:
            if x % y == 0:
                return True
            else:
                return check_divisible(x, y-1)
    if x < 2:
      return False
    else:
      return not check_divisible(x, x-1)
>>> filter(is_prime, [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20])
[2, 3, 5, 7, 11, 13, 17, 19]

ฟังก์ชัน reduce(f, sequence) จะเอาสมาชิกสองตัวแรกของ list sequence ไปเป็น parameter ของฟังก์ชัน f หลังจากนั้นจะเอาผลลัพธ์ที่ได้กับสมาชิกตัวที่สามไปใส่ฟังก์ชัน f อีกครั้ง แล้วเอาผลลัพธ์ที่ได้กับสมาชิกตัวที่สี่ไปใส่ฟังก์ชัน f อีกครั้ง ไปเรื่อยๆ จนหมด list เสร็จแล้วฟังก์ชัน reduce จะคืนค่าที่เป็นผลลัพธ์ของฟังก์ชัน f ครั้งสุดท้ายออกมา

def add(x,y):
    return x+y
>>> reduce(add, [1,5,9,10])
25
>>> reduce(max, [6,0,-5,9])
9

ฟังก์ชัน range

ฟังก์ชัน range(a,b,x) เป็นฟังก์ขันที่ใช้สร้าง list ที่เก็บตัวเลขที่เรียงกันเป็นลำดับเลขคณิต โดยมันจะสร้าง list ที่มีค่า a, a+x, a+2x, a+3x, ..., a+kx โดยที่ a+kx < b ถ้า x เป็นบวก หรือ a+kx > b ถ้า x เป็นลบ

>>> range(1,11,3)
[1, 4, 7, 10]
>>> range(11, 1, -3)
[11, 8, 5, 2]
>>> range(0, 100, 10)
[0, 10, 20, 30, 40, 50, 60, 70, 80, 90]

ถ้าเราละเละ x ฟังก์ชัน range จะให้ x มีค่าเป็น 1 โดยอัตโนมัติ

>>> range(17, 21)
[17, 18, 19, 20]
>>> range(0, 10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

ถ้าเราเรียกฟังก์ชัน range โดยมี parameter เพียงแค่ตัวเดียว เราจะได้ list ของจำนวนเต็มที่ไม่เป็นลบทั้งหมดที่น้อยกว่าค่านั้น เรียงจากน้อยไปมาก

>>> range(20)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
>>> range(5)
[0, 1, 2, 3, 4]
หน้าก่อน: Tuples สารบัญ หน้าต่อไป: Loops