Mô tả bài toán
Tạo Series chứa 5 chữ cái thường (a-z) ngẫu nhiên, nhưng chỉ chọn từ các vị trí index chẵn (0, 2, 4, ... tương ứng a, c, e, ...).
Giải pháp 1: Slicing list + random.sample (khuyên dùng)
import pandas as pd
import string
import random as r
# Tất cả chữ cái thường
chars = string.ascii_lowercase # 'abcdefghijklmnopqrstuvwxyz'
print("Tất cả chữ cái:", chars)
# Lấy index chẵn: chars[::2] -> a, c, e, g, ...
even_chars = chars[::2]
print("Chữ cái index chẵn:", even_chars)
# Chọn 5 ngẫu nhiên
selected = r.sample(even_chars, 5)
result = pd.Series(selected)
print("\nSeries kết quả:")
print(result)
Đầu ra mẫu
Tất cả chữ cái: abcdefghijklmnopqrstuvwxyz Chữ cái index chẵn: acegikmoqsuwy Series kết quả: 0 w 1 k 2 i 3 u 4 m dtype: object
Giải pháp 2: Vòng lặp kiểm tra index (cách gốc)
import pandas as pd
import string
import random as r
l = list(string.ascii_lowercase)
ls = []
for i in l:
if l.index(i) % 2 == 0: # index chẵn
ls.append(i)
data = pd.Series(r.sample(ls, 5))
print(data)
Nhược điểm cách 2: l.index(i) duyệt O(n) mỗi lần, tổng O(n²). Cách 1 dùng slicing [::2] là O(1).
Giải pháp 3: Numpy (hiệu năng cao)
import pandas as pd import numpy as np even_chars = np.array(list(string.ascii_lowercase))[::2] selected = np.random.choice(even_chars, size=5, replace=False) result = pd.Series(selected) print(result)
Lưu ý: random.sample không lặp (replace=False), np.random.choice mặc định có lặp, cần set replace=False.