Tất tần tật về các cách merge list trong Python
Qua bài viết này hãy tìm hiểu nhiều cách làm khác nhau để merge các list trong Python.
List trong Python là gì?
Python biết được 1 số loại dữ liệu phức hợp, vốn được dùng để group các giá trị khác lại cùng nhau. Và cách linh hoạt nhất chính là list, có thể được viết dưới dạng 1 list các giá trị (hay item) được phân tách bằng dấu phẩy giữa các dấu ngoặc vuông. Các list có thể chứa các loại item khác nhau, nhưng thông thường tất cả item đều có cùng 1 loại.
Tìm việc python các công ty lớn
Các cách khác nhau để hợp nhất danh sách – merge list:
1. append – nối thêm
– Phương pháp append sẽ thêm 1 item tới cuối list.
– Độ dài của list sẽ tăng lên 1.
– Nó sẽ tự cập nhật list gốc.
– Loại return là None
.
l1=[1,2,3]
l2=[4,5,6]
l1.append(l2)
print (l1)
#Output:[1, 2, 3, [4, 5, 6]]
2. extend – mở rộng
– Phương pháp extend sẽ mở rộng list bằng cách nối tất cả các item từ iterable.
– Độ dài của list sẽ được tăng lên phụ thuộc vào độ dài của iterable.
– Nó sẽ tự cập nhật list gốc cho mình.
– Loại return là None.
l1=[1,2,3]
l2=[4,5,6]
l1.extend(l2)
print (l1)
#Output:[1, 2, 3, 4, 5, 6]
3. concatenation – kết hợp
– List cũng hỗ trợ cho concatenation operations – các toán tử kết hợp.
– Chúng ta có thể thêm 2 hay nhiều list hơn bằng cách dùng toán tử +
.
– Nó sẽ không cập nhật list gốc.
– Loại return là 1 list object
mới.
Ví dụ 1: Concatenating 2 list
l1=[1,2,3]
l2=[4,5,6]
l3=l1+l2
print (l3)
#Output:[1, 2, 3, 4, 5, 6]
Ví dụ 2: Concatenating 2 hay nhiều hơn 2 list:
l1=[1,2,3]
l2=[4,5,6]
l3=[7,8]
l4=[9,10]
l5=l1+l2+l3+l4
print (l5)
#Output:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
4. Unpacking – giải nén
Dấu hoa thị *
biểu thị việc giải nén các iterable. Toán hạng của nó phải thuộc dạng iterable. Iterable được mở rộng thành 1 chuỗi các item, được đặt trong tuple, list, hay set mới tại vị trí giải nén.
list1=[*list2,*list3]
Đầu tiên, nó sẽ giải nén phần nội dung và rồi tạo 1 list từ những nội dung đó.
l1=[1,2,3]
l2=[4,5,6]
l3=[*l1,*l2]
print (l3)
#Output:[1, 2, 3, 4, 5, 6]
5. itertools.chain
Hãy tạo 1 iterator để trả về từng phần tử từ iterable đầu tiên cho tới hết, sau đó chuyển sang iterable tiếp theo. Nó sẽ xem các chuỗi liên tiếp như là 1 chuỗi đơn.
itertools.chain(*iterables)
List cũng là iterable, nên chúng ta có thể dùng itertools.chain() để merge 2 dictionaries lại. Loại return sẽ là đối tượng itertools.chain. Chúng ta có thể convert tới 1 list bằng cách dùng constructor list().
import itertools
l1=itertools.chain([1,2,3],[4,5,6])
#Returns an iterator object
print (l1)#Output:<itertools.chain object at 0x029FE4D8>
#converting iterator object to list object
print(list(l1))#Output:[1, 2, 3, 4, 5, 6]
6. List comprehension
1 list comprehension bao gồm dấu ngoặc []
chứa 1 biểu thức – expression được theo sau bởi 1 mệnh đề for
, rồi tới 0 hay nhiều mệnh đề for
hay if
. Kết quả sẽ là 1 list mới mang kết quả từ việc đánh giá biểu thức trong ngữ cảnh của mệnh đề for
và if
theo sau nó.
[expression for item in iterable if conditional]
Ví dụ 1: Joining 2 list bằng cách dùng list comprehension
l1=[1,2,3]
l2=[4,5,6]
l3=[x for n in (l1,l2) for x in n]
print (l3)#Output:[1, 2, 3, 4, 5, 6]
7. for loop
– for loop đầu tiên là để đi qua các list (for n in (l1,l2)
– for loop thứ hai là để đi qua các phần tử trong list (for x in n)
– Sau đó nó sẽ append mỗi phần tử tới list trống được tạo ra trước l3
l1=[1,2,3]
l2=[4,5,6]
l3=[]
for n in (l1,l2):
for x in n:
l3.append(x)
print (l3)
#Output:[1, 2, 3, 4, 5, 6]
———
Cách để join tất cả các chuỗi (string) trong 1 list:
str.join(iterable)
Return 1 chuỗi vốn là concatenation của các chuỗi trong iterable. 1
TypeError
sẽ được trả ra nếu có bất kỳ giá trị không phải là chuỗi (non-string values) nào trong iterable, bao gồm các đối tượngbytes
. Separator giữa các phần tử chính là chuỗi cung cấp phương thức này.
Ví dụ 1: Join tất cả các chuỗi trong list. Separator được cho là khoảng trắng (space)
l1=["Welcome", "to", "python", "programming", "language"]
l2=" ".join(l1)
print (l2)
#Output:
Welcome to python programming language
Ví dụ 2: Join tất cả các chuỗi trong list. Separator được cho là -
l1=["1","2","3"]
l2="-".join(l1)
print (l2)
#Output:1-2-3
———
Cách để gỡ bỏ các phần tử trùng lặp trong lúc merging 2 list:
Các set Python không chứa các phần tử trùng lặp.
Để gỡ bỏ các phần tử trùng lặp từ các list ta có thể convert list thành set bằng cách dùng set() và rồi convert ngược lại tới list bằng cách dùng constructor list().
l1=[1,2,3,4,5]
l2=[1,3,5,7,9]
l3=list(set(l1+l2))
print (l3)
#Output:[1, 2, 3, 4, 5, 7, 9]
———-
Cách nhanh nhất để merge các list trong Python
time.time() → float
Return thời gian tính bằng giây bởi vì epoch như 1 số thực dấu phẩy động (a floating-point number). Epoch chính là điểm nơi thời gian bắt đầu và phụ thuộc vào nền tảng (platform dependent). Date cụ thể của epoch và việc xử lý giây nhuận cũng phụ thuộc vào nền tảng.
Tính thời gian thực hiện bằng phương pháp append
import time
l1=list(range(1,1000000))
l2=list(range(1000000,2000000))
start=time.time()
l1.append(l2)
print (time.time()-start)
#Output:0.0019817352294921875
Tính thời gian thực hiện để merge các list bằng cách dùng phương pháp extend
import time
l1=list(range(1,1000000))
l2=list(range(1000000,2000000))
start1=time.time()
l1.extend(l2)
print (time.time()-start1)
#Output:0.00701141357421875
Tính thời gian thực hiện để join các list bằng cách dùng toán tử concatenation
import time
l1=list(range(1,1000000))
l2=list(range(1000000,2000000))
start2=time.time()
l1+l2
print (time.time()-start2)
#Output:0.014112710952758789
Tính thời gian thực hiện để merge các list bằng cách dùng phương pháp giải nén – unpacking
import time
l1=list(range(1,1000000))
l2=list(range(1000000,2000000))
start3=time.time()
[*l1,*l2]
print (time.time()-start3)
#Output:0.020873069763183594
Tính thời gian thực hiện để merge các list bằng cách dùng intertools.chain()
import itertools
import time
l1=list(range(1,1000000))
l2=list(range(1000000,2000000))
start4=time.time()
l3=itertools.chain(l1,l2)
list(l3)
print (time.time()-start4)
#Output:0.045874595642089844
Tính thời gian thực hiện để merge các list bằng cách dùng list comprehension
import time
l1=list(range(1,1000000))
l2=list(range(1000000,2000000))
start5=time.time()
l3=[x for n in (l1,l2) for x in n]
print (time.time()-start5)
#Output:0.06680965423583984
Tính thời gian thực hiện để merge các list bằng cách dùng for loop
import time
l1=list(range(1,1000000))
l2=list(range(1000000,2000000))
start5=time.time()
l3=[]
for n in (l1,l2):
for x in n:
l3.append(x)
print (time.time()-start5)
#Output:0.23975229263305664
Hãy so sánh thời gian thực hiện bằng tất cả các phương pháp để merge các list:
Kết luận:
– Phương pháp append sẽ thêm list như 1 phần tử tới 1 list khác. Độ dài của list sẽ được tăng lên 1 chỉ sau khi appending 1 list.
– Phương pháp extend sẽ mở rộng list bằng cách appending tất cả các item từ iterable(list khác). Độ dài của list sẽ được tăng lên tùy thuộc vào độ dài của iterable.
– Cả 2 phương pháp append và extend sẽ sửa đổi list gốc ban đầu.
– Concatenation, giải nén, list comprehension return 1 đối tượng list mới. Nó sẽ không sửa đổi list gốc ban đầu.
– itertools.chain() – Loại return sẽ là đối tượng itertools.chain. Chúng ta có thể convert tới 1 list bằng cách dùng constructor list().
_________
Các nguồn tài nguyên bạn có thể tham khảo:
1. An Informal Introduction to Python – Python 3.8.5 documentation
https://docs.python.org/3/tutorial/introduction.html#lists
2. Data Structures – Python 3.8.5 documentation
https://docs.python.org/3/tutorial/datastructures.html#more-on-lists
3. Expressions – Python 3.8.5 documentation
https://docs.python.org/3/reference/expressions.html#exprlists
4. What’s New In Python 3.5 – Python 3.8.5 documentation
https://docs.python.org/3/whatsnew/3.5.html#pep-448-additional-unpacking-generalizations
5. What is the fastest way to merge two lists in Python?
https://stackoverflow.com/questions/17044508/what-is-the-fastest-way-to-merge-two-lists-in-python
Có thể bạn quan tâm:
- Tổng hợp các Module Python “khủng” mà bạn có thể đã bỏ qua
- Bookmark 5 website học lập trình Python tốt nhất
Bài viết gốc được đăng tại Medium
Xem thêm tuyển dụng it lương cao hấp dẫn tại TopDev
- B BenQ RD Series – Dòng Màn Hình Lập Trình 4k+ Đầu Tiên Trên Thế Giới
- F Framework nào tốt nhất cho dự án của bạn? – Checklist chi tiết
- K Kinh nghiệm xử lý responsive table hiệu quả
- S Stackoverflow là gì? Bí kíp tận dụng Stack Overflow hiệu quả
- 7 7 kinh nghiệm hữu ích khi làm việc với GIT trong dự án
- B Bài tập Python từ cơ bản đến nâng cao (có lời giải)
- B Bảo mật API là gì? Một số nguyên tắc và kỹ thuật cần biết
- H Hướng dẫn cài đặt và tự học lập trình Python cơ bản từ A-Z
- C Chinh Phục Phân Tích Dữ Liệu Với Pandas Trong Python: Hướng Dẫn Từng Bước
- D Display CSS là gì? Cách khai báo và sử dụng thuộc tính display trong CSS