Hướng dẫn how do you select a specific index in python? - làm cách nào để bạn chọn một chỉ mục cụ thể trong python?

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]

Hướng dẫn how do you select a specific index in python? - làm cách nào để bạn chọn một chỉ mục cụ thể trong python?

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

good_indices = [0, 3]
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]
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.

  1. 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]
    
  2. 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.

http://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

Hướng dẫn how do you select a specific index in python? - làm cách nào để bạn chọn một chỉ mục cụ thể trong python?

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]
1

Gary Kerrgary Kerr

good_objects = [True, False, False, True]
2

12.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]
3

Eyrofireeyrofire

3102 Huy hiệu bạc9 Huy hiệu ĐồngJun 14, 2014 at 22:08

1