Tôi có một tình huống với một số danh sách song song cần được lọc dựa trên các giá trị trong một trong các danh sách. Đôi khi tôi viết một cái gì đó như thế này để lọc chúng:Xử lý trường hợp trống với lọc tuple và giải nén
lista = [1, 2, 3]
listb = [7, 8, 9]
filtered_a, filtered_b = zip(*[(a, b) for (a, b) in zip(lista, listb) if a < 3])
Điều này cho phép filtered_a == (1, 2)
và filtered_b == (7, 8)
Tuy nhiên, việc thay đổi điều kiện cuối cùng từ a < 3
để a < 0
gây một ngoại lệ được nâng lên:
Traceback (most recent call last):
...
ValueError: need more than 0 values to unpack
Tôi biết lý do tại sao điều này xảy ra: danh sách hiểu là trống, vì vậy nó giống như gọi số zip(*[])
, giống như zip()
, mà chỉ cần retur ns một danh sách rỗng không thể được giải nén thành các filter_a và filter_b iterables riêng biệt.
Có chức năng lọc tốt hơn (ngắn hơn, đơn giản hơn, phù hợp hơn) để xử lý trường hợp trống không? Trong trường hợp trống, tôi mong đợi filter_a, và filter_b là các vòng lặp trống nên bất kỳ mã nào sau đây có thể không thay đổi.
Bạn mong đợi điều gì về 'filter_a' và' filtering_b' trong trường hợp này? 'Không'? Tuples/danh sách rỗng? –
@TomDalton - Quên điều đó, cảm ơn. Đã thêm vào câu hỏi ngay bây giờ: "Trong trường hợp trống, tôi mong đợi filter_a và filter_b là các vòng lặp trống nên bất kỳ mã nào sau đây có thể vẫn không thay đổi". – Justin