7.1 Phép nhân
Trong Python, có cú pháp tiện lợi cho phép bạn tăng số lượng phần tử. Để làm điều này, dùng toán tử nhân đơn giản.
Phát sinh chuỗi
Có thể áp dụng nó cho chuỗi:
print("Mẹ" * 5) # in ra MẹMẹMẹMẹMẹ
Hoặc có thể, ví dụ, nhanh chóng in ra một chuỗi phân cách:
print("-" * 40) # in ra ----------------------------------------
Phát sinh danh sách
Cũng có thể nhân số lượng phần tử trong danh sách:
print(["apple"] * 5) # in ra ['apple', 'apple', 'apple', 'apple', 'apple']
Toán tử này cũng có ứng dụng thực tế hơn. Ví dụ, bạn muốn tạo một danh sách với 10 phần tử toàn bằng số không:
alist = [0] * 10
print(alist) # in ra [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Bạn thậm chí có thể tạo mảng hai chiều. Ví dụ, bạn muốn tạo một mảng 20x10, toàn bằng số không. Điều này cũng đơn giản:
alist = [[0] * 10] * 20
print(alist) # in ra [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0], ...]
Rất tiện lợi, đúng không nào?
7.2 List Comprehension
Trong Python có một công cụ hữu ích gọi là "List Comprehension" — đây là cách thuận tiện và gọn gàng để tạo danh sách. Công cụ cú pháp này cho phép phát sinh danh sách mới bằng cách áp dụng một biểu thức cho từng phần tử của một đối tượng có thể lặp lại chỉ trong một dòng mã ngắn.
Dễ dàng hơn khi chỉ là mô tả. Công cụ cú pháp này trông như thế này:
[biểu_thức for biến in dãy]
Ở đây:
-
biến— là định danh của một biến nào đó, -
dãy— là dãy giá trị mà biến này nhận (có thể là danh sách, chuỗi hoặc đối tượng được lấy ra bằng hàmrange), -
biểu_thức— một biểu thức nào đó, thường phụ thuộc vào biến được sử dụng trong bộ phát sinh, sẽ được dùng để lấp đầy các phần tử danh sách.
Quan trọng! Tất cả biểu thức phải được đặt trong dấu ngoặc vuông.
Dưới đây là một số ví dụ sử dụng bộ phát sinh:
Tạo danh sách gồm n số không, có thể bằng cách dùng bộ phát sinh:
alist = [0 for i in range(100)]
Tạo danh sách gồm các bình phương của các số nguyên, có thể làm như thế này:
n = 5
alist = [i ** 2 for i in range(n)]
Tạo danh sách gồm các số nguyên từ 1 đến n:
n = 10
alist = [i + 1 for i in range(n)]
Đây là cách để nhận một danh sách gồm các số ngẫu nhiên từ 1 đến 9 (sử dụng hàm randrange() từ module random):
from random import randrange
n = 10
alist = [randrange(1, 10) for i in range(n)]
7.3 Vòng lặp trong List Comprehension
List Comprehension có thể không chỉ được dùng để phát sinh danh sách. Thực tế, đây chỉ là một cách ghi gọn cho vòng lặp for.
Ví dụ, dùng nó để đơn giản in ra một số giá trị từ danh sách:
alist = ["apple", "banana", "cherry"]
[print(x) for x in alist]
Hoặc thậm chí có thể nhập các giá trị từ bàn phím:
a = [input() for i in range(int(input()))]
Trong ví dụ này, danh sách sẽ gồm các chuỗi được đọc từ đầu vào. Đầu tiên bạn phải nhập số phần tử của danh sách (giá trị này sẽ được dùng làm tham số cho hàm range), sau đó là số lượng chuỗi yêu cầu.
Trong cách quen thuộc bạn viết mã thế này:
n = int(input())
a = []
for i in range(n):
x = input()
a.append(x)
Thực ra, khả năng của List Comprehension khá nhiều:
Có thể dùng điều kiện:
Thêm điều kiện vào biểu thức cho phép lọc các phần tử, ví dụ, có thể tạo danh sách chỉ gồm các số chẵn:
[x for x in range(10) if x % 2 == 0]
Vòng lặp lồng nhau:
Bộ phát sinh cho phép sử dụng vòng lặp lồng nhau, ví dụ, để tạo mảng nhiều chiều:
[(x, y) for x in range(3) for y in range(3)]
GO TO FULL VERSION