Giải pháp
Có, bạn có thể:
l = L[1::2]
Và đây là tất cả. Kết quả sẽ chứa các phần tử được đặt trên các vị trí sau ( 0
-based, vì vậy phần tử đầu tiên ở vị trí 0
, thứ hai ở vị trí , 1
v.v.):
1, 3, 5
vì vậy kết quả (số thực) sẽ là:
2, 4, 6
Giải trình
Các [1::2]
cuối cùng chỉ là một ký hiệu cho danh sách cắt. Thông thường nó ở dạng sau:
some_list[start:stop:step]
Nếu chúng tôi bỏ qua start
, mặc định ( 0
) sẽ được sử dụng. Vì vậy, phần tử đầu tiên (tại vị trí 0
, vì các chỉ mục được 0
dựa trên cơ sở) sẽ được chọn. Trong trường hợp này, phần tử thứ hai sẽ được chọn.
Vì phần tử thứ hai bị bỏ qua, phần tử mặc định đang được sử dụng (phần cuối của danh sách). Vì vậy, danh sách đang được lặp lại từ phần tử thứ hai đến cuối .
Chúng tôi cũng cung cấp đối số thứ ba ( step
) là 2
. Có nghĩa là một phần tử sẽ được chọn, phần tử tiếp theo sẽ bị bỏ qua, v.v.
Vì vậy, tóm lại, trong trường hợp này [1::2]
có nghĩa là:
- lấy phần tử thứ hai (nhân tiện, là một phần tử lẻ, nếu bạn đánh giá từ chỉ mục),
- bỏ qua một phần tử (bởi vì chúng tôi có
step=2
, vì vậy chúng tôi đang bỏ qua một phần tử, trái ngược với step=1
phần tử mặc định),
- lấy phần tử tiếp theo,
- Lặp lại các bước 2.-3. cho đến khi đạt đến cuối danh sách,
CHỈNH SỬA : @PreetKukreti đã đưa ra một liên kết cho một lời giải thích khác về ký hiệu cắt danh sách của Python. Xem tại đây: Giải thích ký hiệu lát cắt của Python
Bổ sung - thay thế bộ đếm bằng enumerate()
Trong mã của bạn, bạn tạo và tăng bộ đếm một cách rõ ràng. Trong Python, điều này là không cần thiết, vì bạn có thể liệt kê thông qua một số có thể lặp lại bằng cách sử dụng enumerate()
:
for count, i in enumerate(L):
if count % 2 == 1:
l.append(i)
Ở trên phục vụ chính xác mục đích giống như mã bạn đang sử dụng:
count = 0
for i in L:
if count % 2 == 1:
l.append(i)
count += 1
Tìm hiểu thêm về mô phỏng for
vòng lặp với bộ đếm trong Python: Truy cập chỉ mục trong vòng lặp 'for' trong Python