Có tình huống cần lặp lại các giá trị trong danh sách. Việc nhân đôi giá trị này có thể đạt được trong Python theo các cách sau.
Sử dụng vòng lặp for lồng nhau
Đây là cách tiếp cận trực tiếp: lấy từng phần tử, cho qua vòng lặp for bên trong để tạo bản sao, rồi truyền cả hai cho vòng lặp for bên ngoài.
Ví dụ
# Danh sách cho trước listA = ['Mon', 'Tue', 9, 3, 3] print("Danh sách cho trước : ",listA) # Thêm phần tử khác cho mỗi phần tử Newlist = [i for i in listA for n in (0, 1)] # Kết quả print("Danh sách mới sau khi nhân đôi: ",Newlist)Kết quả
Chạy mã trên cho kết quả sau −
Danh sách cho trước : ['Mon', 'Tue', 9, 3, 3] Danh sách mới sau khi nhân đôi: ['Mon', 'Mon', 'Tue', 'Tue', 9, 9, 3, 3, 3, 3]
Sử dụng itertools
Module itertools xử lý thao tác dữ liệu trong iterables. Ở đây ta áp dụng chain.from_iterable.
Ví dụ
import itertools # Danh sách cho trước listA = ['Mon', 'Tue', 9, 3, 3] print("Danh sách cho trước : ",listA) # Thêm phần tử khác cho mỗi phần tử Newlist = list(itertools.chain.from_iterable([n, n] for n in listA)) # Kết quả print("Danh sách mới sau khi nhân đôi: ",Newlist)Kết quả
Chạy mã trên cho kết quả sau −
Danh sách cho trước : ['Mon', 'Tue', 9, 3, 3] Danh sách mới sau khi nhân đôi: ['Mon', 'Mon', 'Tue', 'Tue', 9, 9, 3, 3, 3, 3]
Sử dụng reduce
Hàm reduce áp dụng một hàm cụ thể được truyền làm đối số cho tất cả các phần tử danh sách được truyền làm đối số thứ hai. Ta dùng nó với hàm add để thêm bản sao của mỗi phần tử hiện diện trong danh sách.
Ví dụ
from functools import reduce from operator import add # Danh sách cho trước listA = ['Mon', 'Tue', 9, 3, 3] print("Danh sách cho trước : ",listA) # Thêm phần tử khác cho mỗi phần tử Newlist = list(reduce(add, [(i, i) for i in listA])) # Kết quả print("Danh sách mới sau khi nhân đôi: ",Newlist)Kết quả
Chạy mã trên cho kết quả sau −
Danh sách cho trước : ['Mon', 'Tue', 9, 3, 3] Danh sách mới sau khi nhân đôi: ['Mon', 'Mon', 'Tue', 'Tue', 9, 9, 3, 3, 3, 3]