Tôi có một số danh sách có tất cả cùng một số mục nhập [mỗi lần chỉ định thuộc tính đối tượng]:
property_a = [545., 656., 5.4, 33.]
property_b = [ 1.2, 1.3, 2.3, 0.3]
...
và liệt kê với những lá cờ có cùng chiều dài
good_objects = [True, False, False, True]
[có thể dễ dàng thay thế bằng danh sách chỉ mục tương đương:
good_indices = [0, 3]
Cách dễ nhất để tạo danh sách mới
good_objects = [True, False, False, True]
4, good_objects = [True, False, False, True]
5, ... chỉ chứa các giá trị được chỉ định bởi các mục good_objects = [True, False, False, True]
6 hoặc các chỉ số là gì?property_asel = [545., 33.]
property_bsel = [ 1.2, 0.3]
Silentghost
296K64 Huy hiệu vàng302 Huy hiệu bạc291 Huy hiệu Đồng64 gold badges302 silver badges291 bronze badges
hỏi ngày 5 tháng 7 năm 2010 lúc 11:30Jul 5, 2010 at 11:30
fuenfundachtzigfuenfundachtzigfuenfundachtzig
7.58612 Huy hiệu vàng61 Huy hiệu bạc84 Huy hiệu đồng12 gold badges61 silver badges84 bronze badges
Bạn chỉ có thể sử dụng danh sách hiểu biết:
property_asel = [val for is_good, val in zip[good_objects, property_a] if is_good]
hoặc
property_asel = [property_a[i] for i in good_indices]
Cái sau nhanh hơn vì có ít
good_objects = [True, False, False, True]
7 hơn độ dài của good_objects = [True, False, False, True]
8, giả sử good_objects = [True, False, False, True]
7 được tính toán trước thay vì được tạo ra khi đang bay.Chỉnh sửa: Tùy chọn đầu tiên tương đương với
0 có sẵn kể từ Python 2.7/3.1. Xem câu trả lời của @Gary Kerr.: The first option is equivalent to good_indices = [0, 3]
good_indices = [0, 3]
0 available since Python 2.7/3.1. See @Gary Kerr's answer.property_asel = list[itertools.compress[property_a, good_objects]]
Đã trả lời ngày 5 tháng 7 năm 2010 lúc 11:32Jul 5, 2010 at 11:32
Kennytmkennytmkennytm
500K101 Huy hiệu vàng1064 Huy hiệu bạc995 Huy hiệu Đồng101 gold badges1064 silver badges995 bronze badges
7
Tôi thấy 2 tùy chọn.
Sử dụng Numpy:
property_a = numpy.array[[545., 656., 5.4, 33.]] property_b = numpy.array[[ 1.2, 1.3, 2.3, 0.3]] good_objects = [True, False, False, True] good_indices = [0, 3] property_asel = property_a[good_objects] property_bsel = property_b[good_indices]
Sử dụng danh sách hiểu và zip nó:
property_a = [545., 656., 5.4, 33.] property_b = [ 1.2, 1.3, 2.3, 0.3] good_objects = [True, False, False, True] good_indices = [0, 3] property_asel = [x for x, y in zip[property_a, good_objects] if y] property_bsel = [property_b[i] for i in good_indices]
Đã trả lời ngày 5 tháng 7 năm 2010 lúc 11:34Jul 5, 2010 at 11:34
3
Sử dụng zip chức năng tích hợp
property_asel = [a for [a, truth] in zip[property_a, good_objects] if truth]
CHỈNH SỬA
Chỉ cần nhìn vào các tính năng mới của 2.7. Hiện tại có một chức năng trong mô -đun itertools tương tự như mã trên.
//docs.python.org/library/itertools.html#itertools.compress
good_objects = [True, False, False, True]
0
Đã trả lời ngày 5 tháng 7 năm 2010 lúc 11:34Jul 5, 2010 at 11:34
Sử dụng zip chức năng tích hợpGary Kerr
CHỈNH SỬA4 gold badges47 silver badges51 bronze badges
3
Chỉ cần nhìn vào các tính năng mới của 2.7. Hiện tại có một chức năng trong mô -đun itertools tương tự như mã trên.
good_objects = [True, False, False, True]
1Gary Kerrgary Kerr
good_objects = [True, False, False, True]
212.8k4 Huy hiệu vàng47 Huy hiệu bạc51 Huy hiệu Đồng
Giả sử bạn chỉ có danh sách các mục và danh sách các chỉ số đúng/cần thiết, đây sẽ là nhanh nhất:
Điều này có nghĩa là lựa chọn tài sản sẽ chỉ làm nhiều vòng như có các chỉ số đúng/bắt buộc. Nếu bạn có nhiều danh sách thuộc tính tuân theo các quy tắc của một thẻ [đúng/sai], bạn có thể tạo danh sách chỉ số bằng cách sử dụng cùng một nguyên tắc hiểu danh sách:index for every group of index, item that exists in an enumeration of good objects, if [where] the item is True
Điều này lặp lại thông qua từng mục trong Good_Objects [trong khi ghi nhớ chỉ mục của nó với sự liệt kê] và chỉ trả về các chỉ số trong đó mục là đúng.Mar 11, 2014 at 16:54
Đối với bất kỳ ai không nhận được danh sách hiểu, đây là phiên bản văn xuôi tiếng Anh với mã được tô sáng trong in đậm:Eyrofire
Liệt kê chỉ mục cho mọi nhóm chỉ mục, mục tồn tại trong một bảng liệt kê các đối tượng tốt, nếu [trong đó] vật phẩm là đúng2 silver badges9 bronze badges
Đã trả lời ngày 11 tháng 3 năm 2014 lúc 16:54
good_objects = [True, False, False, True]
3Eyrofireeyrofire
3102 Huy hiệu bạc9 Huy hiệu ĐồngJun 14, 2014 at 22:08
1