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]

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.

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

Bài Viết Liên Quan

Chủ Đề