Trong bài này, chúng ta sẽ thấy cách tìm hiệu giữa hai phần tử liên tiếp cho mỗi cặp phần tử trong một danh sách cho trước. Danh sách chỉ chứa số.
Với chỉ số (Index)
Dùng chỉ số phần tử cùng vòng lặp for, ta tìm hiệu giữa các cặp phần tử liên tiếp.
Ví dụ
listA = [12, 14, 78, 24, 24] # Danh sách cho trước
print("Danh sách cho trước : \n", listA)
# Dùng vị trí chỉ số
res = [listA[i + 1] - listA[i] for i in range(len(listA) - 1)]
# In kết quả
print("Danh sách với hiệu các phần tử liên tiếp : \n", res) Kết quả
Chạy mã trên cho kết quả sau:
Danh sách cho trước : [12, 14, 78, 24, 24] Danh sách với hiệu các phần tử liên tiếp : [2, 64, -54, 0]
Với cắt danh sách (Slicing)
Cắt danh sách là kỹ thuật khác: ta cắt các cặp liên tiếp từ danh sách và áp dụng hàm zip để lấy kết quả.
Ví dụ
listA = [12, 14, 78, 24, 24] # Danh sách cho trước
print("Danh sách cho trước : \n", listA)
# Dùng cắt danh sách
res = [x - y for y, x in zip(listA[:-1], listA[1:])]
# In kết quả
print("Danh sách với hiệu các phần tử liên tiếp : \n", res) Kết quả
Chạy mã trên cho kết quả sau:
Danh sách cho trước : [12, 14, 78, 24, 24] Danh sách với hiệu các phần tử liên tiếp : [2, 64, -54, 0]
Với operator.sub
Phương thức sub từ mô-đun operator cũng có thể dùng qua hàm map. Lại áp dụng kỹ thuật cắt để lấy các cặp liên tiếp.
Ví dụ
import operator
listA = [12, 14, 78, 24, 24] # Danh sách cho trước
print("Danh sách cho trước : \n", listA)
# Dùng operator.sub
res = list(map(operator.sub, listA[1:], listA[:-1]))
# In kết quả
print("Danh sách với hiệu các phần tử liên tiếp : \n", res) Kết quả
Chạy mã trên cho kết quả sau:
Danh sách cho trước : [12, 14, 78, 24, 24] Danh sách với hiệu các phần tử liên tiếp : [2, 64, -54, 0]