Trong bài viết này, chúng ta sẽ xem cách lấy một danh sách chứa các số lẻ và thêm các phần tử lẻ đó lặp lại vào chính danh sách đó. Nghĩa là nếu một số lẻ xuất hiện 2 lần trong danh sách, sau khi xử lý nó sẽ xuất hiện 4 lần.
Để đáp ứng yêu cầu này, chúng ta có nhiều cách tiếp cận: sử dụng vòng lặp for kết hợp điều kiện in, hoặc dùng module itertools. Kiểm tra số lẻ thực hiện bằng cách chia mỗi phần tử cho 2.
Ví dụ
from itertools import chain
import numpy as np
data_1 = [2, 11, 5, 24, 5]
data_2 = [-1, -2, -9, -12]
data_3 = [27/3, 49/7, 25/5]
odd_repeat_element_3 = []
# Cách 1: dùng for và in
odd_repeat_element = [values for i in data_1 for values in (i,) * (i % 2 + 1)]
print("Given input values:", data_1)
print("List with odd number repeated values:", odd_repeat_element)
# Cách 2: dùng chain từ itertools
odd_repeat_element_2 = list(chain.from_iterable([n] if n % 2 == 0 else [n]*2 for n in data_2))
print("\nGiven input values:", data_2)
print("List with odd number repeated values:", odd_repeat_element_2)
# Cách 3: dùng extend từ numpy
for m in data_3:
(odd_repeat_element_3.extend(np.repeat(m, 2, axis=0)) if m % 2 == 1 else odd_repeat_element_3.append(m))
print("\nGiven input values:", data_3)
print("List with odd number repeated values:", odd_repeat_element_3)
Chạy đoạn mã trên cho kết quả sau:
Given input values: [2, 11, 5, 24, 5] List with odd number repeated values: [2, 11, 11, 5, 5, 24, 5, 5] Given input values: [-1, -2, -9, -12] List with odd number repeated values: [-1, -1, -2, -9, -9, -12] Given input values: [9.0, 7.0, 5.0] List with odd number repeated values: [9.0, 9.0, 7.0, 7.0, 5.0, 5.0]