Giả sử rằng A
và B
có cùng độ dài, mỗi người trong số các yếu tố đầu tiên của bản ghi trong A
tương ứng với một phần tử trong B
và không có bản sao, bạn có thể sử dụng này:
>>> A = [[3,5],[1,3],[6,1]]
>>> B = [6,1,3]
>>> A_ind = {b: [b, a] for (b, a) in A}
>>> [A_ind[b] for b in B]
[[6, 1], [1, 3], [3, 5]]
Điều này chỉ đơn giản là tạo ra một dict
, ánh xạ phần b
từ A
đến toàn bộ các phần tử và tìm kiếm các phần tử tương ứng trong B
trong đó dict
. Sử dụng không sorted
không index
, điều này có độ phức tạp của O (n).
Nếu có thể được các yếu tố trùng lặp, bạn có thể tạo một dict
(hoặc defaultdict
) phím lập bản đồ vào danh sách các yếu tố có quan trọng mà:
>>> A = [[3,5],[1,3],[6,1],[1,4]]
>>> A_ind = collections.defaultdict(list)
>>> for b, a in A:
... A_ind[b].append([b,a])
...
>>> B = [6,1,3,1]
>>> [a for b in B for a in A_ind[b]]
[[6, 1], [1, 3], [1, 4], [3, 5], [1, 3], [1, 4]]
Hoặc xoay list
vào iter
ators để phân phối các giá trị trong A
cho các phím phù hợp trong B
:
>>> A_ind = {k: iter(v) for k, v in A_ind.items()}
>>> [next(A_ind[b]) for b in B]
[[6, 1], [1, 3], [3, 5], [1, 4]]
mã ban đầu của bạn với hành động sắp xếp? – RomanPerekhrest
nếu mục B không tồn tại trong A thì sao? Tôi cũng giả sử A, B có cùng chiều dài. – coder
@coder Tôi không nghĩ có bất kỳ vấn đề nào nếu 'B' không tồn tại trong' A'. Đó là khi số từ 'A' không tồn tại trong' B'. Nó loại ám chỉ sự sắp xếp của bạn vô nghĩa khi thứ tự được định nghĩa trong 'B'. –