Tôi có một danh sách gồm 20000 danh sách. Tôi sử dụng phần tử thứ 3 của mỗi danh sách làm cờ. Tôi muốn thực hiện một số thao tác trên danh sách này miễn là ít nhất một phần tử của cờ là 0, giống như:Làm cách nào để kiểm tra xem tất cả các thành phần của danh sách có phù hợp với điều kiện không?
my_list = [["a", "b", 0], ["c", "d", 0], ["e", "f", 0], .....]
Ban đầu tất cả cờ là 0. Tôi sử dụng vòng lặp while để kiểm tra xem có ít nhất một phần tử không cờ là 0:
def check(lista):
for item in lista:
if item[2] == 0:
return True
return False
Nếu check(my_list)
lợi nhuận True
, sau đó tôi tiếp tục làm việc trên danh sách của tôi:
while check(my_list):
for item in my_list:
if condition:
item[2] = 1
else:
do_sth()
Thật sự tôi muốn loại bỏ yếu tố trong my_list như tôi lặp vượt qua nó, nhưng tôi không được phép xóa mục khi tôi lặp lại nó.
gốc my_list không có cờ:
my_list = [["a", "b"], ["c", "d"], ["e", "f"], .....]
Vì tôi không thể loại bỏ yếu tố như tôi lặp qua nó, tôi phát minh ra những lá cờ. Nhưng my_list
chứa nhiều mục và vòng lặp while
đọc tất cả các mục đó tại mỗi vòng for
và nó tiêu tốn rất nhiều thời gian! Bạn có đề nghị nào không?
Hình như cấu trúc dữ liệu của bạn không phải là lý tưởng cho các vấn đề của bạn.Nếu bạn giải thích ngữ cảnh nhiều hơn một chút, có lẽ chúng ta có thể gợi ý điều gì đó thích hợp hơn. – uselpa
Có thể bạn có thể thay thế các mục bằng 'None' hoặc' [] 'khi bạn lặp qua danh sách thay vì xóa chúng. Kiểm tra toàn bộ danh sách với 'check() 'lặp qua tất cả các mục trước mỗi pass trên vòng lặp bên trong là một cách tiếp cận rất chậm. – martineau