Tag: list

  • Kiểu danh sách List trong Dart

    Kiểu danh sách List trong Dart

    Kiểu danh sách List trong Dart

    Kiểu dữ liệu danh sách List trong Dart được sử dụng để biểu diễn cho một tập hợp các đối tượng theo một thứ tự nhất định. Kiểu danh sách List trong Dart tương đương với kiểu mảng Array trong các ngôn ngữ khác (Python chẳng hạn).

    Một List là một nhóm có thứ tự các đối tượng. Một List sử dụng để chứa nhiều đối tượng / giá trị – ta gọi chung là phần tử – trong một biến duy nhất.

    1. Khai báo một danh sách List trong Python

    var monAn = ['cơm', 'canh', 'cà', 'cá'];
    
    List<String> hoaQua = ['nho', 'táo', 'cam', 'bưởi', 'sầu riêng'];
    monAn.length; //kết quả 4
    hoaQua.length; //kết quả 5
    • Để truy cập đến một phần tử của List danh_sách, chúng ta dùng cú pháp danh_sách[index] với index là chỉ mục của phần tử đó trong danh_sách. Ví dụ với List monAn ở trên, thì phần tử có index 1 là 'canh'
    monAn[1]; //kết quả 'canh'
    
    hoaQua[0]; //kết quả 'nho'
    • Để truy cập đến nhiều phần tử liên tiếp nhau của List, chúng ta dùng cú pháp

    tenDanhSach.sublist(i,j)

    trong đó i là chỉ số của phần tử đầu tiên, j là chỉ số của phần tử cuối cùng cần lấy ra tính từ đầu List. Nếu muốn lấy từ phần tử từ chỉ số i đến cuối danh sách, chúng ta dùng tenDanhSach.sublist(i,)

    • Tuy nhiên, chúng ta ưu tiên cách khai báo sử dụng từ khóa var vì tính ngắn gọn của nó.

    2. Các loại danh sách List trong Dart

    Trong Dart, danh sách List có thể được phân loại thành:

    • Danh sách độ dài cố định
    • Danh sách có thể mở rộng

    Danh sách độ dài cố định (Fixed Length List)

    • Một đối tượng List trong Dart có thể được khai báo với kích thước cố định, không thể thay đổi bằng cú pháp:

    var list_name = List(size);

    • Một danh sách được khai báo không có kích thước/độ dài cụ thể được gọi là Danh sách có thể phát triển (Growable List). Độ dài của danh sách có thể phát triển có thể thay đổi trong thời gian chạy.
    • Cách khai báo một List có độ dài có thể phát triển như ở phần 1.

    3. Các thuộc tính của kiểu List trong Dart

    Dưới đây là danh sách các thuộc tính được hỗ trợ bởi Dart List.

    Thuộc tính Ý nghĩa
    first Trả về phần tử đầu tiên của List.
    isEmpty Trả về true nếu List là rỗng (không có phần tử nào).
    isNotEmpty Trả về true nếu List có ít nhất một phần tử.
    length Trả về độ dài / kích thước của List, đây chính là số phần tử trong List.
    last Trả về phần tử cuối cùng trong List.
    contains(phần_tử) Kiểm tra xem List có chứa phần_tử hay không.
    reversed Trả về một Iterable  chứa các phần tử của List ban đầu nhưng theo thứ tự ngược lại.
    Single Được sử dụng để kiểm tra xem danh sách có phải chỉ có một phần tử không và trả về phần tử đó.

    Ví dụ.

    void main() {
      var khaiVi = ['súp', 'gỏi tôm', 'sò huyết', 'sườn', 'thịt nguội' ];
      
      print(khaiVi.first); //súp
      print(khaiVi.last); //thịt nguội
      print(khaiVi.isEmpty); //false
      print(khaiVi.reversed); //(thịt nguội, sườn, sò huyết, gỏi tôm, súp)
    }

    4. Các phương thức của kiểu danh sách List trong Dart

    4.1. Chèn các phần tử vào danh sách

    • add()Hàmadd(phần_tử) được sử dụng để nối  thêm một phần_tử vào cuối một List và trả về List mới này.
    • addAll() Hàm addAll(các_phần_tử) được sử dụng để thêm nhiều phần tử vào một List, các_phần_tử được phân tách bằng dấu phẩy và được đặt trong dấu ngoặc vuông []. Bạn hình dung hàm addAll() chính là nối thêm một danh sách khác vào danh sách đang có.
    • insert() Hàm insert(index, phần_tử) dùng để chèn thêm một phần_tửtử vào vị trí index xác định.
    void main() {
      var evenList = [2, 10];
      print(evenList);
      evenList.insertAll(1, [4, 6, 8]);
      print(evenList);
    }

    4.2. Cập nhật danh sách

    • Cách đơn giản nhất một phần tử danh sách có thể được sửa đổi bằng cách truy cập phần tử và gán giá trị mới cho phần tử đó.

    tenDanhSach[index] = giá_trị_mới;

    void main() {
      var evenList = [2, 4, 5, 8, 10];
      print("Danh sách trước khi cập nhật ${evenList}");
      evenList[2] = 6;
      print("Danh sách sau khi cập nhật ${evenList}");
    }
    • replaceRange() Hàm replaceRange(i,j,các_giá_trị_mới) được sử dụng để cập nhật một loạt các phần tử của danh sách từ vị trí chỉ mục i tới vị trí j-1 bởi các_giá_trị_mới.

    4.3. Xóa các phần tử danh sách

    • remove() Hàm remove(phần_tử) dùng để xóa một phần_tử xuất hiện đầu tiên tính từ đầu danh sách khỏi danh sách đó. Kết quả trả về là true nếu phần_tử bị xóa khỏi danh sách.
    void main() {
      var evenList = [2, 4, 6, 8, 10, 6, 12];
      print("Danh sách trước khi xóa ${evenList}");
      evenList.removeRange(2,3);
      print("Danh sách sau khi xóa ${evenList}"); //[2, 4, 8, 10, 6, 12]
    }

    5. Các phương thức nâng cao của List

    5.1. Duyệt các phần tử của List trong Dart

    Trong Dart, chúng ta có thể duyệt tuần tự qua các phần tử danh sách bằng phương thức forEach như sau:

    void main() {
      var list = ["Xuân", "Hạ", "Thu", "Đông"];
      list.forEach((item) {
        print('$item');
      });
    }

    5.2. Sắp xếp các phần tử trong List

    Sử dụng phương thức sort. Bạn có thể đọc thêm về hàm này tại đây https://api.dart.dev/stable/2.12.2/dart-core/dart-core-library.html

    void main() {
      var khaiVi = ['súp', 'gỏi tôm', 'sò huyết', 'sườn', 'thịt nguội' ];
      
      khaiVi.sort();
      print(khaiVi);//[gỏi tôm, sò huyết, súp, sườn, thịt nguội]
    }

    5.3. Hàm map

    Hàm map(f(e)) → Iterable dùng để ánh xạ mỗi phần tử e của List qua hàm f thành phần tử f(e) của một Iterable mới.

    void main() {
      var soChan = [0, 2, 4, 6, 8, 10];
    
      print(soChan.map((i) => i +1)); //kết quả (1, 3, 5, 7, 9, 11)
    }
    

    5.4. Hàm every

    Hàm every(bool f(E element)) sử dụng để kiểm tra xem mọi phần tử element của E có thỏa mãn hàm f hay không.

    void main() {
      var soChan = [0, 2, 4, 6, 8, 10];
      var soLe = [1, 2, 3, 4, 5, 6, 7, 8, 9];
    
      print(soChan.every((i) => i % 2 == 0)); //true
      print(soLe.every((i) => i.isOdd)); //false
    }

    6. Danh sách của danh sách trong Dart

    Vì Dart không hỗ trợ kiểu mảng 2 chiều nên chúng ta phải sử dụng danh sách của danh sách. Tức là mỗi phần tử của List lại là một List khác.

    void main() {
      var khaiVi = ['súp', 'gỏi tôm', 'sò huyết', 'sườn', 'thịt nguội' ];
      var monChinh = ['tôm hùm', 'cua hoàng đế', 'nem công', 'chả phượng'];
      var trangMieng = ['bánh chuối', 'chè sen', 'bánh cuộn', 'bánh nếp'];
      var monAn = [khaiVi, monChinh, trangMieng];
      print(monAn);
    }

    Khi đó, để truy cập đến một phần tử cụ thể của danh sách, chúng ta dùng cú pháp

    tenDanhSach[i][j]

    Ví dụ, monAn[1] sẽ trả về danh sách ['tôm hùm', 'cua hoàng đế', 'nem công', 'chả phượng'] còn monAn[1][2] sẽ trả về phần tử 'nem công'

    Xem tài liệu về kiểu List đầy đủ nhất tại https://api.dart.dev/stable/2.10.5/dart-core/List-class.html

  • Python Arrays – Python Lists

    Python Arrays – Python Lists

    Python Arrays – Python Lists

    Does python have an array?

    • Arrays are used to store multiple values in one single variable.
    • Python does not have built-in support for Arrays, but Python Lists can be used instead.

    What is Python Lists/Python Arrays?

    Python Lists are used to store multiple items in a single variable. For example, fruits_list has 4 items apple, banana, cherry, orange

    fruits_list = ["apple", "banana", "cherry", "orange"]

    Lists are one of 4 built-in data types in Python used to store collections of data, the other 3 are Tuple, Set, and Dictionary, all with different qualities and usage.

    Lists are created using square brackets []

    Python List/Array Methods

    Python has a set of built-in methods that you can use on lists/arrays.

    Method Description
    append() Adds an element at the end of the list
    clear() Removes all the elements from the list
    copy() Returns a copy of the list
    count() Returns the number of elements with the specified value
    extend() Add the elements of a list (or any iterable), to the end of the current list
    index() Returns the index of the first element with the specified value
    insert() Adds an element at the specified position
    pop() Removes the element at the specified position
    remove() Removes the first item with the specified value
    reverse() Reverses the order of the list
    sort() Sorts the list

    Python Lists/Python Arrays Items

    • List items are ordered, changeable, and allow duplicate values.
    • List items are indexed, the first item has index [0], the second item has index [1] etc. For example, fruits_list = ["apple", "banana", "cherry", "orange"] then fruits_list[0]="apple", fruits_list[1]=banana

    Ordered

    • When we say that lists are ordered, it means that the items have a defined order, and that order will not change.
    • If you add new items to a list, the new items will be placed at the end of the list.
    • Note: There are some list methods that will change the order, but in general: the order of the items will not change.
    • Changeable
    • The list is changeable, meaning that we can change, add, and remove items in a list after it has been created.

    Python List Items Allow Duplicates

    • Since lists are indexed, lists can have items with the same value:
    • Example

    fruits_list = ["apple", "banana", "cherry", "apple", "cherry"]

     

    Python List Length

    • To determine how many items a list has, use the len() function:

    Example

    Print the number of items in the list:

    fruits_list = ["apple", "banana", "cherry", "apple", "cherry"]
    len(fruits_list)

    List Items – Data Types

    • List items can be of any data type.

    Example: String, int and boolean data types:

    list1 = ["apple", "banana", "cherry"]
    list2 = [1, 5, 7, 9, 3]
    list3 = [True, False, False]
    • A list can contain different data types:

    Example: A list with strings, integers and boolean values:

    my_list = ["abc", 34, True, 40, "male"]

    type()

    • From Python’s perspective, lists are defined as objects with the data type ‘list’:
    • <class ‘list’>
    • Example: What is the data type of a list?

    mylist = ["apple", "banana", "cherry"]
    print(type(mylist))

    The list() Constructor

    • It is also possible to use the list() constructor when creating a new list.
    • Example

      Using the list() constructor to make a List:

      thislist = list(("apple", "banana", "cherry")) # note the double round-brackets
      print(thislist)

    Python List of Lists (Python List in list)

    A list of lists in Python is a list object where each list element is a list by itself. Create a list of list in Python by using the square bracket notation to create a nested list [[1, 2, 3], [4, 5, 6], [7, 8, 9]].

    Create a List of Lists in Python

    Create a list of lists by using the square bracket notation. For example, to create a list of lists of integer values, use [[1, 2], [3, 4]]. Each list element of the outer list is a nested list itself.

    Convert List of Lists to One List

    Say, you want to convert a list of lists [[1, 2], [3, 4]] into a single list [1, 2, 3, 4]. How to achieve this? There are different options:

    • List comprehension [x for l in lst for x in l] assuming you have a list of lists lst.
    • Unpacking [*lst[0], *lst[1]] assuming you have a list of two lists lst.
    • Using the extend() method of Python lists to extend all lists in the list of lists.

    Find examples of all three methods in the following code snippet:

    lst = [[1, 2], [3, 4]]
    
    # Method 1: List Comprehension
    flat_1 = [x for l in lst for x in l]
    
    # Method 2: Unpacking
    flat_2 = [*lst[0], *lst[1]]
    
    # Method 3: Extend Method
    flat_3 = []
    for l in lst:
    flat_3.extend(l)
    
    ## Check results:
    print(flat_1)
    # [1, 2, 3, 4]
    
    print(flat_2)
    # [1, 2, 3, 4]
    
    print(flat_3)
    # [1, 2, 3, 4]

    Due its simplicity and efficiency, the first list comprehension method is superior to the other two methods.

  • Kiểu dữ liệu list danh sách trong Python

    Kiểu dữ liệu list danh sách trong Python

    Kiểu dữ liệu list danh sách trong Python

    Danh sách trong Python kí hiệu là list, hiểu đơn là một tập hợp các đối tượng có chung một tính chất nào đó. Ví dụ danh sách các món ăn trên bàn tiệc, danh sách các bài hát của một album, danh sách học sinh trong một lớp học…

    Ta thấy ngay, mỗi danh sách đều gồm có các phần tử khác nhau, để liệt kê chúng, chẳng hạn liệt kê các thực phẩm cần mua cho bữa liên hoan, bạn sẽ sử dụng dấu phẩy để ngăn cách các phần tử này. Python cũng vậy, tuy nhiên, các danh sách các phần tử cần được đặt trong cặp ngoặc vuông [].

    1. Giới thiệu kiểu danh sách trong Python

    Để khai báo một danh sách, chúng ta dùng liệt kê các phần tử của danh sách, được đặt trong cặp ngoặc vuông [], các phần tử được ngăn cách nhau bởi dấu phảy ,. Mỗi phần tử trong danh sách có thể có kiểu bất kỳ như str, float, hay int

    Ví dụ sau tạo một danh sách mon_an gồm có các phần tử kiểu xâu str là các món canh cua, cà pháo, cá khothịt rán.

    >>> mon_an = ['canh cua', 'ca phao', 'ca kho', 'thit ran']

    Một danh sách không có thể phần tử, gọi là danh sách rỗng.

    >>> ban_gai = []
    >>> ban_gai
    []

    Để truy cập vào một phần tử của danh sách list trong Python, ta dùng tên danh sách theo sau là chỉ số index của phần tử đó được đặt trong cặp ngoặc vuông.

    >>> mon_an[3]
    'thit ran'

    Cũng giống như kiểu xâu str, các chỉ số index của một danh sách list được đánh số bắt đầu từ 0. Kiểu danh sách có thể hiểu gần giống như kiểu mảng array trong các ngôn ngữ lập trình khác.

    Không như kiểu xâu str, là những đối tượng immutable, thì kiểu danh sách là đối tượng mutable, tức ta có thể thay đổi các phần tử của một danh sách. Chẳng hạn, thay cà pháo bằng dưa muối, ta sẽ gán giá trị mới cho phần tử mon_an[1].

    >>> mon_an[1] = 'dua muoi'
    >>> mon_an
    ['canh cua', 'dua muoi', 'ca kho', 'thit ran']

    2. Các phép toán và phương thức của kiểu danh sách

    Cũng giống như kiểu xâu str, kiểu danh sách list cũng có các phép toán và phương thức đặc thù. Chúng ta sẽ lần lượt tìm hiểu các toán tử và phương thức/hàm của kiểu danh sách trong Python.

    2.1. Toán tử in

    Toán tử in dùng để kiểm tra xem một phần tử có nằm trong danh sách hay không, kết quả trả về của toán tử này là kiểu boolean đúng True hoặc sai False.

    >>> mon_an = ['canh cua', 'ca phao', 'ca kho', 'thit ran']
    >>> 'canh cua' in mon_an
    True
    >>> 3000 in mon_an
    False

    Bạn cũng có thể sử dụng toán tử in để duyệt danh sách trong vòng lặp for như sau.

    >>> for i in mon_an:
    ...     print(i)
    ...
    canh cua
    ca phao
    ca kho
    thit ran

    2.2. Toán tử +

    Toán tử + cho phép ghép nối hai danh sách với nhau. Lưu ý rằng toán tử + này tương tự phép cộng hai xâu (chuỗi, string) chứ không giống như toán tử cộng các số.

    >>> a = [1, 2, 3]
    >>> b = ['x', 'y', 'z', 'a']
    >>> a + b
    [1, 2, 3, 'x', 'y', 'z', 'a']

    2.3. Toán tử *

    Tương tự toán tử * dùng để lặp lại các phần tử trong danh sách lên k lần.

    >>> a = [0] * 4
    >>> a
    [0, 0, 0, 0]

    2.4. Phương thức append()

    Phương thức <ds>.append(<pt>) này sẽ thêm phần tử <pt> vào cuối danh sách <ds>.

    >>> ds = [1, 2, 3, 4]
    >>> ds.append(5)
    >>> ds
    [1, 2, 3, 4, 5]

    2.5. Phương thức extend()

    Phương thức <ds1>.extend(<ds2>) này sẽ thêm các phần tử của danh sách <ds2> vào cuối của danh sách <ds1>

    >>> l1 = [1, 2, 3]
    >>> l2 = [4, 5, 6, 7]
    >>> l1.extend(l2)
    >>> print(l1)
    [1, 2, 3, 4, 5, 6, 7]

    2.6. Phương thức sort()

    Phương thức <ds>.sort() giúp sắp xếp các phần tử của danh sách <ds> theo thứ tự phần tử từ nhỏ đến lớn, đối với kiểu chuỗi thì sắp theo thứ tự alphabet. Lưu ý rằng các phần tử của danh sách phải thuộc cùng một kiểu dữ liệu, cùng kiểu chuỗi hoặc cùng kiểu số…, tức là các phần tử của danh sách phải so sánh được với nhau.

    >>> ds_so = [1, 5, 7, 3, 2, 9]
    >>> ds_so.sort()
    >>> ds_so
    [1, 2, 3, 5, 7, 9]
    >>> ds_xau = ['a', 'e', 'b', 'g', 'i', 'Aa']
    >>> ds_xau.sort()
    >>> ds_xau
    ['Aa', 'a', 'b', 'e', 'g', 'i']

    2.7. Phương thức pop()

    Phương thức <ds>.pop(i) xóa phần tử có chỉ số i của danh sách <ds>, kết quả trả về chính là giá trị của phần tử có chỉ số i đó. Nhắc lại rằng, các phần tử của danh sách được đánh chỉ số từ 0

    >>> ds = [1, 5, 7, 3, 2, 9]
    >>> ds.pop(1)
    5
    >>> ds
    [1, 7, 3, 2, 9]

    2.8. Toán tử del

    Toán tử del <ds>[i] để xóa phần tử có chỉ số i của danh sách <ds> hoặc del <ds>[i:j] một phần của danh sách từ chỉ sối đến chỉ số j.

    >>> ds = [1, 2, 3, 4, 5, 6, 7, 8, 9]
    >>> del ds[0]
    >>> ds
    [2, 3, 4, 5, 6, 7, 8, 9]
    >>> del ds[1:3]
    >>> ds
    [2, 5, 6, 7, 8, 9]

    2.9. Phương thức remove()

    Phương thức pop() xóa bỏ phần tử của danh sách dựa trên chỉ số của phần tử đó, thì phương thức <ds>.remove(<pt>) sẽ xóa bỏ phần tử có giá trị <pt> đầu tiên của danh sách <ds> khỏi danh sách đó. Giá trị trả về của phương thức remove()None.

    ds = [1, 2, 3, 4, 5, 6, 7, 8, 8, 9]
    >>> ds.remove(8)
    >>> ds
    [1, 2, 3, 4, 5, 6, 7, 8, 9]

    Nếu bạn muốn xóa bỏ tất cả các phần tử có giá trị <pt> khỏi danh sách <ds>, có thể làm như sau:

    >>> ds = [1, 2, 3, 4, 5, 6, 7, 8, 8, 9]
    >>> while 8 in ds: ds.remove(8)
    >>> ds
    [1, 2, 3, 4, 5, 6, 7, 9]

    3. Xử lý danh sách trong Python

    Các thao tác thường được thực hiện trên list trong Python là xử lý từng phần tử của list, lọc lấy một số phần tử thỏa điều kiện nào đó, tính toán trên tất cả các phần tử của list.

    Để đơn giản việc xử lý danh sách list, Python hỗ trợ một số hàm có sẵn để thực hiện các tác vụ trên gồm map(), filter(), reduce()

    3.1. Hàm map() để xử lý danh sách trong Python

    Sử dụng câu lệnh map(func, seq) sẽ áp dụng hàm func cho mỗi phần tử của seq và trả về list kết quả.

    Ví dụ, tính bình phương các số có trong list a sử dụng map():

    a = [1, 2, 3, 4, 5]
    def binh_phuong(x):
       return x*x
    print(list(map(binh_phuong,a)))

    Có thể sử dụng hàm nặc danh lamda thay vì viết riêng một hàm binh_phuong.

    >>> a = [1, 2, 3, 4, 5]
    >>> print(list(map(lambda x: x*x, a)))
    [1, 4, 9, 16, 25]

    Thêm một ví dụ nữa, chúng ta sẽ cộng tương ứng từng phần tử của hai danh sách có cùng số lượng phần tử:

    numbers1 = [1, 2, 3] 
    numbers2 = [4, 5, 6] 
      
    result = map(lambda x, y: x + y, numbers1, numbers2) 
    print(list(result))

    3.2. Hàm filter() xử lý kiểu dữ liệu danh sách trong Python

    Hàm filter(func, list) sẽ  lần lượt gọi hàm func với tham số lần lượt là từng phần tử của danh sách list và trả về danh sách gồm các phần tử thỏa mãn hàm func. Lưu ý rằng hàm func phải là hàm mà kết quả trả về thuộc kiểu Boolean True hoặc False, tức là hàm func như là một hàm điều kiện để lọc ra các phần tử của danh sách list thỏa mãn điều kiện đó.

    Ví dụ lọc ra các số chẵn từ danh sách a.

    a = [1, 2, 3, 4, 5, 6, 7, 8, 9]
    
    def so_chan(number):
       if number % 2 == 0:
          return True
       else:
          return False
    
    print (list(filter(so_chan, a)))

    Hoặc, sử dụng hàm nặc danh lambda, ta có thể viết chương trình gọn hơn như sau:

    >>> a = [1, 2, 3, 4, 5, 6, 7, 8, 9]
    >>> print (list(filter(lambda x: x%2 == 0, a)))
    [2, 4, 6, 8]

    Thêm một ví dụ nữa, sử dụng hàm filter() để in ra các nguyên âm trong một danh sách:

    def nguyen_am(x): 
        ds_nguyen_am = ['a', 'e', 'i', 'o', 'u'] 
        if (x in ds_nguyen_am): 
            return True
        else: 
            return False
    
    ds = ['g', 'e', 'e', 'j', 'k', 's', 'p', 'r'] 
      
    kq = filter(nguyen_am, ds) 
    
    for s in kq: 
        print(s)

    3.3. Hàm reduce() xử lý kiểu dữ liệu danh sách trong Python

    Hàm reduce(func, <ds>) sẽ tính toán, áp dụng hàm func với các phần tử của danh sách và trả về kết quả của.

    Hàm func là một hàm nhận vào 2 tham số có dạng func(arg1, arg2) trong đó arg1 là kết quả tính toán với các phần tử trước, arg2 là giá trị của phần tử của danh sách đang được tính toán.

    Cách thức hoạt động của hàm reduce() chi tiết như sau:

    • Ở bước đầu tiên, hai phần tử đầu tiên của danh sách <ds> được lấy và cung cấp cho hàm func thu được một kết quả kq.
    • Bước tiếp theo, hàm func nhận tham số là kết quả kq đạt được ở bước trước và phần tử tiếp theo của danh sách <ds>, kết quả tính toán lại được sử dụng như một tham số cho bước tiếp theo.
    • Quá trình này tiếp tục cho đến khi không còn phần tử nào trong danh sách <ds>.
    • Kết quả trả về của hàm reduce() là kết quả ở bước cuối cùng của hàm func.

    Lưu ý rằng, hàm reduce nằm trong thư viện functools, nên cần phải khai báo import functools trước khi sử dụng hàm reduce().

    Ví dụ sau in ra tổng các giá trị của danh sách và phần tử lớn nhất của danh sách.

    from functools import *
      
    ds = [ 1 , 3, 5, 6, 2, ] 
    
    print ("Tong cac phan tu cua danh sach la: ",end="") 
    print (reduce(lambda a,b : a+b, ds)) 
      
    
    print ("Phan tu lon nhat cua danh sach la: ",end="") 
    print (reduce(lambda a,b : a if a > b else b, ds))

    Ví dụ tính tổng bình phương của các phần tử trong danh sách a

    a = [1, 2, 3, 4, 5]
    
    def tong_binh_phuong(kq, x):
       return kq + x*x
    
    print(reduce(tong_binh_phuong, a))

    4. Danh sách của danh sách, kiểu danh sách nhiều chiều trong Python

    Các phần tử của một danh sách danh sách trong Python lại có thể là một danh sách, chẳng hạn

    >>> A = [[1,2,3], [4,5,6], [7,8,9,10,11]]
    >>> A[1]
    [4, 5, 6]
    >>> A[1][2]
    6
    >>> A[2][4]
    11
    >>> A[1][5]
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    IndexError: list index out of range

    Danh sách A gồm có ba phần tử, mỗi phần tử lại là một danh sách [1,2,3], [4,5,6], [7,8,9,10,11]. Khi đó, để truy cập đến phần tử j của danh sách A[i] nằm trong danh sách  A ta dùng cú pháp A[i][j].

    Kiểu dữ liệu này tương ứng với kiểu mảng hai chiều array, hoặc là ma trận, trong các ngôn ngữ khác. Tuy nhiên, nếu một ma trận thì, nếu xét riêng từng dòng, bắt buộc các dòng phải có số cột như nhau. Nhưng ở đây thì khác, nếu ta viết lại list A ở trên, mỗi phần tử viết trên một dòng thì ta sẽ có dạng gần giống ma trận, do số cột của từng dòng là khác nhau

    [1,2,3]
    [4,5,6]
    [7,8,9,10,11]

    Rõ ràng, kiểu danh sách của danh sách này linh hoạt hơn – nhưng cũng đồng nghĩa với khó kiểm soát hơn – kiểu mảng hai chiều trong các ngôn ngữ khác.

    5. Danh sách và chuỗi

    Bạn có thể kết hợp danh sách và chuỗi để tách các ký tự trong chuỗi thành một danh sách, sử dụng hàm ép kiểu list() như sau.

    >>> s = 'phan van phuong'
    >>> list(s)
    ['p', 'h', 'a', 'n', ' ', 'v', 'a', 'n', ' ', 'p', 'h', 'u', 'o', 'n', 'g']
    Hoặc có thể tách một chuỗi thành danh sách gồm các phần tử cách nhau bởi <kí_tự_tách> bằng hàm split(<kí_tự_tách>), mặc định <kí_tự_tách> là khoảng trắng.
    >>> s = 'phan van phuong'
    >>> s.split()
    ['phan', 'van', 'phuong']
    >>> s.split('n')
    ['pha', ' va', ' phuo', 'g']

    6. Bài tập kiểu list danh sách trong Python

    Bài 1. Cho một list các số nguyên. Viết chương trình tìm phần tử lớn nhất của list đó.

    Bài 2. Cho một list các số nguyên. Viết chương trình in ra tất cả các phần tử lớn là số chẵn và lớn hơn 10 của list đó.

    Bài 3. Viết chương trình tính số trung bình các giá trị của một list số nguyên.

    Bài 4. Tạo một list gồm n số nguyên không âm ngẫu nhiên.

    Xem thêm về các kiểu dữ liệu list (danh sách trong Python) tại https://www.w3schools.com/python/python_lists.asp