Cách tốt nhất, cả về mặt thẩm mỹ và từ góc độ hiệu suất, để phân chia một danh sách các mục thành nhiều danh sách dựa trên một điều kiện? Tương đương với:
good = [x for x in mylist if x in goodvals]
bad = [x for x in mylist if x not in goodvals]
Có cách nào thanh lịch hơn để làm điều này?
Cập nhật: đây là trường hợp sử dụng thực tế, để giải thích rõ hơn những gì tôi đang cố gắng thực hiện:
# files looks like: [ ('file1.jpg', 33L, '.jpg'), ('file2.avi', 999L, '.avi'), ... ]
IMAGE_TYPES = ('.jpg','.jpeg','.gif','.bmp','.png')
images = [f for f in files if f[2].lower() in IMAGE_TYPES]
anims = [f for f in files if f[2].lower() not in IMAGE_TYPES]
str.split()
, để chia danh sách thành một bộ sưu tập các danh sách phụ liên tiếp. Ví dụ split([1,2,3,4,5,3,6], 3) -> ([1,2],[4,5],[6])
, trái ngược với việc phân chia các yếu tố của danh sách theo danh mục.
IMAGE_TYPES = set('.jpg','.jpeg','.gif','.bmp','.png')
. n (1) thay vì n (o / 2), thực tế không có sự khác biệt về khả năng đọc.