Sử dụng vòng lặp. Lặp lại từng phần tử trong danh sách bằng vòng lặp for và kiểm tra xem num % 2. = 0. Nếu điều kiện thỏa mãn thì chỉ in ra số.
Python3
21 45 930
21 45 931
21 45 932
21 45 933
21 45 934
[21, 45, 93]53
21 45 936
21 45 9393
21 45 936
21 45 939
21 45 936
21 45 9391
21 45 936
[21, 45, 93]8
21 45 936
Trên mỗi lần lặp, chúng tôi sử dụng toán tử modulo
21 45 937 để kiểm tra xem số hiện tại có phần còn lại khi chia cho
21 45 938
Toán tử modulo [%] trả về phần còn lại từ phép chia giá trị thứ nhất cho giá trị thứ hai
Nếu số có dư khi chia cho 2 thì nó là số lẻ, vì vậy chúng tôi sử dụng phương pháp
21 45 939 để loại bỏ nó khỏi danh sách
Danh sách. phương thức remove[] loại bỏ mục đầu tiên khỏi danh sách có giá trị bằng với đối số được truyền vào
Phương thức
21 45 930 thay đổi danh sách ban đầu và trả về
21 45 931
Sau lần lặp cuối cùng, danh sách chỉ chứa các số chẵn
Ngoài ra, bạn có thể sử dụng cách hiểu danh sách đơn giản
Xóa các số Lẻ khỏi Danh sách bằng cách hiểu danh sách #
Để xóa các số lẻ khỏi danh sách
- Sử dụng khả năng hiểu danh sách để lặp lại danh sách
- Kiểm tra xem mỗi mục không có số dư khi chia cho 2
- Danh sách mới sẽ chỉ chứa các số chẵn
Chúng tôi đã sử dụng cách hiểu danh sách để lặp lại danh sách
Khả năng hiểu danh sách được sử dụng để thực hiện một số thao tác cho mọi phần tử hoặc chọn một tập hợp con các phần tử đáp ứng một điều kiện
Trên mỗi lần lặp, chúng tôi sử dụng toán tử modulo
21 45 937 để kiểm tra xem số hiện tại không có phần còn lại khi chia cho
21 45 938
Nếu số không có phần dư khi chia cho
21 45 938, thì đó là một số chẵn và được thêm vào danh sách mới
Danh sách mới chỉ chứa các số chẵn từ danh sách ban đầu
Ngoài ra, bạn có thể sử dụng phương pháp
21 45 9382
Xóa các số Lẻ khỏi Danh sách bằng bộ lọc[] #
Để xóa các số lẻ khỏi danh sách
- Truyền hàm
21 45 93
83 và danh sách cho hàm21 45 93
82 - Hàm lambda sẽ kiểm tra xem mỗi số không có phần dư khi chia cho
21 45 93
8 - Sử dụng lớp
21 45 93
86 để chuyển đổi đối tượng21 45 93
87 thành danh sách
Hàm bộ lọc lấy một hàm và một iterable làm đối số và xây dựng một iterator từ các phần tử của iterable mà hàm trả về một giá trị trung thực
Hàm
21 45 9383 mà chúng tôi đã chuyển cho bộ lọc được gọi với từng mục trong danh sách
Hàm kiểm tra xem mặt hàng được cung cấp có dư không khi chia cho
21 45 938 và trả về kết quả
ở đây tôi đã sử dụng hàm del để xóa phần tử đầu tiên trong danh sách, hoạt động tốt nếu danh sách chứa số chẵn cũng như số lẻ, nhưng nếu nó chứa tất cả các số chẵn thì nó sẽ xóa mọi số chẵn khỏi danh sách và trả về một danh sách trống, nhưng
21 45 935
nó cho đầu ra như
21 45 936
thay vì tạo một danh sách trống
Vui lòng trả lời với một lời giải thích cho cả hai câu hỏi.
Sự khác biệt được tạo ra bởi vòng lặp while hơn là vòng lặp for
Vòng lặp while sẽ tiếp tục cho đến khi thỏa mãn điều kiện. Điều này có thể dẫn đến các vòng lặp vô hạn. Bạn cần phải rất cẩn thận về các điều kiện trong những. Tuy nhiên, nó cho phép bạn chỉnh sửa danh sách mà không gặp lỗi do kích thước danh sách đang thay đổi
Vòng lặp for sẽ chỉ đi qua tất cả các mục trong danh sách mà nó được đưa ra. Điều này không bao giờ có thể dẫn đến một vòng lặp vô hạn. Tuy nhiên, nói chung không nên xóa hoặc thêm các mục vào danh sách mà bạn đang lặp lại. Điều này có thể và sẽ dẫn đến lỗi
Ở đây tôi đã sử dụng hàm del để xóa phần tử đầu tiên trong danh sách, hoạt động tốt nếu danh sách chứa số chẵn cũng như số lẻ, nhưng nếu nó chứa tất cả các số chẵn thì nó sẽ xóa mọi số chẵn khỏi danh sách và trả về một danh sách trống, nhưng
Bạn đang gặp sự cố do chỉnh sửa danh sách đang được sử dụng trong vòng lặp for. Đừng làm điều này. Giải pháp tốt nhất, nếu bạn định thêm hoặc xóa khỏi danh sách, là sử dụng vòng lặp while
Bây giờ tôi nhìn lại nó, nó vẫn hoạt động tốt ngay cả khi không hoán đổi danh sách. Tôi vừa chỉ ra rằng nếu việc lặp qua một danh sách thay đổi trong vòng lặp for dễ xảy ra lỗi, bạn có thể tạo một danh sách khác để sửa đổi
Theo công cụ trực quan này, vấn đề chính với mã đầu tiên là
21 45 933 khiến python bỏ qua các sự kiện xóa khi tương tác. http. //www. gia sư trăn. com/visualize_for_i_in_lst Vì vậy, tại lần lặp i=lst[0], nó sẽ xóa lst[0]. Lần lặp lại tiếp theo, i=lst[1], sẽ xem xét lst[0] của lst=[8, 10]. Điều này vượt qua logic modulo để xóa lst[0]=8. Lần lặp lại tiếp theo sẽ là i=lst[2] của lst=[10], giá trị này là null nên nó không thực thi logic modulo trên lst và trả về lst=[10]
Khi bạn thay đổi thành
21 45 934, tôi nghi ngờ nó tạo ra một đối tượng/biến phạm vi mới ở đầu vòng lặp for, nhưng đây chỉ là dự đoán của tôi. Tôi chỉ đang học những thứ này. Công cụ trực quan hiển thị mã lặp lại từ 0 đến 2 mặc dù ở lần lặp cuối cùng, lst=[10] và len[lst]=1. http. //www. gia sư trăn. com/visualize_for_i_in_range[len[lst]]
Nếu lst là 10 tỷ số đầu tiên trong pi, một vòng lặp while sẽ xem xét và xóa 3 và 1. Khi đến 4, nó sẽ nhìn vào nó và dừng lại, trả về phần còn lại của danh sách. Vòng lặp for mà tôi đặt ở đó sẽ xem xét mọi số trong danh sách ngay cả sau khi lst[0] là số chẵn. Cái có điểm ngắt xa hơn sẽ dừng lại nhưng nó có thể vẫn tiêu tốn một số tài nguyên khi thiết lập phạm vi [len [lst]]