Tôi đang cố gắng viết các triển khai khác nhau cho một phân số knapsack problem.Sắp xếp 2 danh sách bằng Python dựa trên tỷ lệ của từng phần tử tương ứng hoặc dựa trên danh sách thứ ba
Đối với điều này tôi có 2 mảng:
- Values
- Trọng lượng
Các yếu tố giá trị [n] tương ứng với trọng lượng nguyên tố [n]. Vì vậy, chúng ta có thể tính toán value_per_unit như:
for I in range(values):
value_per_unit.append(values[I]/weights[I])
value_per_unit.sort()
bây giờ tôi cần 2 mảng (giá trị và khối lượng) để được sắp xếp theo các mảng value_per_unit
ví dụ: Nếu
- giá trị = [60, 100, 120]
- trọng số = [20, 50, 30]
Sau đó
values_per_unit = [3.0, 2.0, 4.0]
và do đó values_per_unit_sorted sẽ [2.0, 3.0, 4.0]
tôi cần các giá trị và trọng lượng mảng để trở thành:
- giá trị_sorted = [100,60,120]
- weights_sorted = [50,20,30]
Có cách nào để đạt được điều này sử dụng các hàm lambda đơn giản?
tôi vẫn có thể làm một cái gì đó như thế này, nhưng có vẻ như không hiệu quả mỗi lần tôi cần phải truy cập vào các yếu tố:
weights[(value_per_unit_sorted.index(max(value_per_unit_sorted)))]
Khá nhỏ nhưng bạn tính toán lại tất cả các tỷ lệ với giải pháp này, OP đã được tô đậm để sắp xếp "* theo mảng value_per_unit *", mà tôi khá chắc chắn có nghĩa là sử dụng "mảng" (danh sách) và không tính toán lại các giá trị. Câu trả lời tốt mặc dù :) –
@Tom Sau đó, các giải pháp thứ hai có thể được sử dụng và OP có thể bỏ qua xây dựng danh sách các tỷ lệ ở nơi đầu tiên. –
Tôi đồng ý rằng điều đó có thể hợp lý, nhưng OP đã không yêu cầu bỏ qua bước xây dựng các tỷ lệ; nó hoàn toàn có thể anh ta có thể cần rằng 'danh sách' cho cái gì khác anyway, và do đó muốn có một giải pháp tránh được tính toán lại. –