Page 37 - Python Simple
P. 37

5. Cấu trúc dữ liệu                                              http://www.vithon.org/tutorial/2.5/node7.html



             nhị phân function với thông số là hai phần tử đầu của dãy, rồi sau đó với giá trị trả
             về này với phần tử kế, và cứ thế. Ví dụ, để tính tổng của các số từ 1 đến 10:

                  >>> def add(x,y): return x+y
                  ...
                  >>> reduce(add, range(1, 11))
                  55


             Nếu chỉ có một phần tử trong dãy, giá trị của nó sẽ được trả về; nếu dãy rỗng,
             biệt lệ sẽ được nâng.

             Có thể truyền thêm thông số thứ ba để cho biết giá trị ban đầu. Trong trường
             hợp đó, giá trị này sẽ được trả về nếu dãy rỗng, và hàm sẽ được áp dụng cho giá
             trị ban đầu, và giá trị của phần tử đầu của dãy, rồi với giá trị được trả về với giá
             trị của phần tử kế, và cứ thế. Ví dụ,
                  >>> def sum(seq):
                  ...     def add(x,y): return x+y
                  ...     return reduce(add, seq, 0)
                  ...
                  >>> sum(range(1, 11))
                  55
                  >>> sum([])
                  0


             Đừng dùng định nghĩa của ví dụ này về sum(): vì việc cộng các con số là một
             nhu cầu chung, một hàm có sẵn sum(sequence) đã được cung cấp, và hoặc động
             y như vậy. Từ phiên bản 2.3.


             5.1.4 Gộp danh sách


             Việc gộp danh sách (list comprehension) cung cấp một cách xúc tích để tạo
             danh sách mà không cần dùng tới map(), filter() hoặc lambda. Kết quả là
             khai báo danh sách kiểu này thường dễ hiểu hơn những danh sách tạo ra từ
             những cách kia. Mỗi gộp danh sách chứa một biểu thức, theo sau bởi vế for , rồi
             không có hoặc có các vế for hoặc if . Kết quả sẽ là một danh sách được trả về
             từ việc định giá biểu thức trong ngữ cảnh của các vế for và if theo sau nó. Nếu
             biểu thức trả về một tuple, nó phải được đặt trong ngoặc.

                  >>> freshfruit = ['  banana', '  loganberry ', 'passion fruit  ']
                  >>> [weapon.strip() for weapon in freshfruit]
                  ['banana', 'loganberry', 'passion fruit']
                  >>> vec = [2, 4, 6]
                  >>> [3*x for x in vec]
                  [6, 12, 18]
                  >>> [3*x for x in vec if x > 3]
                  [12, 18]
                  >>> [3*x for x in vec if x < 2]
                  []
                  >>> [[x,x**2] for x in vec]



     4 of 11                                                                                  08/31/2011 07:39 AM
   32   33   34   35   36   37   38   39   40   41   42