Python xóa khỏi danh sách trong khi lặp lại
Nói chung, không nên xóa các mục khỏi danh sách trong khi lặp lại danh sách đó vì nó có thể gây ra hành vi không mong muốn. Thay vào đó, bạn có thể tạo một danh sách mới chỉ chứa các mục bạn muốn giữ lại hoặc bạn có thể sử dụng vòng lặp for với nhiều chỉ mục để lặp qua danh sách và xóa các mục theo chỉ mục. Một tùy chọn khác là sử dụng biểu thức hiểu danh sách hoặc trình tạo để lọc ra các mục không mong muốn Show Đây là một ví dụ về việc tạo một danh sách mới Đây là một ví dụ về việc sử dụng một loạt các chỉ số để loại bỏ các mục Điều quan trọng cần lưu ý là trong phiên bản python 3. 3 trở lên, các vòng lặp for trong python tạo một trình vòng lặp bên trong đầu vào. Vì vậy, trong trăn 3. 3 trở lên, những điều sau đây sẽ tăng
Bạn có thể sử dụng biểu thức hiểu danh sách hoặc trình tạo để xóa các mục không mong muốn như được hiển thị ở trên Không nên xóa các mục khỏi danh sách trong một vòng lặp vì điều này có thể khiến danh sách bỏ qua một vài mục và dẫn đến đầu ra không chính xác. Điều này xảy ra vì việc xóa các mục khỏi danh sách trong khi lặp lại sẽ thay đổi chỉ mục và độ dài của nó 1 2 3 4 5 6 7 8 9 if __name__ == '__main__'.
nums = [1, 2, 3, 4, 5]
cho x in num: số. xóa(x)
in(nums)
Tải xuống Chạy mã 1. Sử dụng danh sách hiểuBạn có thể sử dụng khả năng hiểu danh sách để tạo danh sách mới chỉ chứa các mục mong muốn 1 2 3 4 5 6 7 if __name__ == '__main__'.
nums = [1, 2, 3, 4, 5]
lẻ = [x for x in nums if x & 1] in(lẻ)
Tải xuống Chạy mã 1 2 3 4 5 6 7 if __name__ == '__main__'.
nums = [1, 2, 3, 4, 5]
nums[. ] = [x cho x in nums if x & 1] in(nums)
Tải xuống Chạy mã 2. Sử dụng mô-đun itertoolsTrong Python 3, bạn cũng có thể sử dụng mô-đun thay vì hiểu danh sách. Nó có một hàm 1 2 3 4 5 6 7 8 9 10 11 12 từ itertools nhập filterfalse
def iseven(x): return x & 1 == 0
if __name__ == '__main__'.
nums = [1, 2, 3, 4, 5]
nums[. ] = filterfalse(iseven, nums) in(nums)
Tải xuống Chạy mã 3. Tạo bản sao của danh sáchỞ đây, ý tưởng là lặp lại một bản sao của danh sách và sau đó sửa đổi danh sách ban đầu theo yêu cầu. Đây là một ví dụ làm việc 1 2 3 4 5 6 7 8 9 10 if __name__ == '__main__'.
nums = [1, 2, 3, 4, 5]
cho x trong danh sách(nums): nếu x & 1 == 0: nums. xóa(x)
in(nums)
Tải xuống Chạy mã 4. Lặp lại ngượcMột cách hợp lý khác là lặp lại danh sách và xóa các phần tử khỏi danh sách. Bằng cách này, không có gì bị bỏ qua. Cách tiếp cận này có một lợi thế lớn so với các cách tiếp cận khác vì nó không tạo ra bất kỳ bản sao nào của danh sách và thực hiện công việc chỉ trong một lần và tại chỗ Làm cách nào để xóa một phần tử khỏi danh sách trong Python bằng vòng lặp while?Cách xóa phần tử trong Danh sách Python khi đang lặp . a = [1, 2, 2, 3, 4] #more def even(x): return x % 2 == 0..a = [x cho x trong a nếu không chẵn(x)] # --> a = [1, 3] Một[. ] = [x cho x trong a nếu không chẵn(x)] # --> a = [1, 3] từ itertools nhập filterfalse a[. ] = filterfalse(even, a) # --> a = [1, 3] Chúng tôi có thể xóa phần tử khỏi danh sách trong khi lặp lại không?Xóa phần tử bằng Single Iterator
. Loại bỏ các phần tử liên quan đến giá trị hoặc chỉ mục có thể được thực hiện bằng phương pháp này. we can use an iterator to iterate over the list, and while traversing we can remove the elements we want to remove. Removing elements with respect to value or index can be done using this method. |