# Code theo truyền thốngif__name__=='__main__':L=[14,2,19,5,1,6,2,9,20,11]n=len(L)# Khởi tạo danh sách mớiL_reversed=[0for_inrange(n)]# Duyệt danh sách và gán giá trị theo chỉ sốforiinrange(n):L_reversed[i]=L[n-i-1]print(L_reversed)
Output:
[11, 20, 9, 2, 6, 1, 5, 19, 2, 14]
Trong Python, ta có thể dùng kỹ thuật slicing với số bước là -1.
# Đếm số lần xuất hiện của tất cả phần tửfromcollectionsimportCounterif__name__=='__main__':L=[1,1,14,2,1,5,1,6,2,9,5,9]c=Counter(L)foreinset(L):print(f'{e} occurs {c[e]} time(s).')
Một cách code truyền thống là, trước hết, sắp xếp lại danh sách tăng dần; sau đó duyệt danh sách, bỏ qua các phần tử trùng (đã đứng cạnh nhau sau khi sắp xếp), chỉ giữ lại các giá trị không trùng.
# Code theo truyền thốngif__name__=='__main__':L=[1,2,2,3,3,3,4,4,5,4,4]L.sort()n=len(L)i=0# i là chỉ số của danh sách mớiforjinrange(n):ifL[j]!=L[i]:# Nếu không trùngi=i+1# thì tăng iL[i]=L[j]# gán phần tử không trùng vào vị trí mới# Ngược lại, nếu trùng thì bỏ qua.# Cập nhật lại số phần tử của danh sáchn=i+1# In danh sách mớiforiinrange(n):print(L[i],end=' ')
Output:
1 2 3 4 5
Theo cách viết trên, thực chất các phần tử trùng vẫn còn sống, nằm ở phần sau của L, nhưng được ẩn đi nhờ giá trị của n.
Python có set là kiểu dữ liệu không lưu giá trị trùng. Tận dụng đặc điểm này, ta chuyển từ list sang set để set tự loại bỏ trùng, rồi chuyển ngược từ set về list.
# Code theo truyền thốngif__name__=='__main__':L=[1,2,3,4,5,6,9,8,9]L.sort()unique=Trueforiinrange(1,len(L)):ifL[i]==L[i-1]:unique=Falsebreakifunique==True:print('All elements are unique')else:print('Some element is not unique')
Output:
Some element is not unique
Cũng tương tự mục trên, ta dựa vào lợi thế của kiểu set để dùng hàm len() so sánh số lượng phần tử của list L và set L.
# Code theo Python-styleif__name__=='__main__':L=[1,2,3,4,5,6,9,8,9]iflen(L)==len(set(L)):print('All elements are unique')else:print('Some element is not unique')
Một trong những cách truyền thống là, duyệt danh sách, ghi đè phần tử sau lên phần tử liền trước (gán phần tử j ở sau cho phần tử i phía trước, i tăng chậm hơn j), bỏ qua phần tử nào bằng x.
# Code theo truyền thốngif__name__=='__main__':L=[1,2,3,2,3,4,2,2,6,7]n=len(L)x=2# Giá trị cần xóai=0forjinrange(n):ifL[j]!=x:# Nếu không phải là xL[i]=L[j]# thì cứ đôn phần tử ở sau lên trướci=i+1# tăng i lên 1# Ngược lại, thì bỏ qua, duyệt phần tử j kế tiếp.# Cập nhật lại số phần tử của danh sáchn=i# In danh sách mớiforiinrange(n):print(L[i],end=' ')
Output:
1 3 3 4 6 7
Với Python, ta dùng list comprehension để tạo danh sách mới gồm các phần tử cũ (mà) khác x.