Hướng dẫn python select list elements by index - python chọn phần tử danh sách theo chỉ mục

129

Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.

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 python select list elements by index - python chọn phần tử danh sách theo chỉ mục

Silentghost

294K64 Huy hiệu vàng301 Huy hiệu bạc291 Huy hiệu Đồng64 gold badges301 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.51612 Huy hiệu vàng60 Huy hiệu bạc83 Huy hiệu đồng12 gold badges60 silver badges83 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

498K101 Huy hiệu vàng1062 Huy hiệu bạc994 Huy hiệu Đồng101 gold badges1062 silver badges994 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 python select list elements by index - python chọn phần tử danh sách theo chỉ mục

Sử dụng zip chức năng tích hợpGary Kerr

CHỈNH SỬA4 gold badges47 silver badges50 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ạc 50 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

Làm thế nào để bạn có được một phần tử từ một danh sách bằng chỉ mục của nó?

Vì vậy, bạn có thể lấy bất kỳ yếu tố danh sách nào bạn muốn bằng cách sử dụng chỉ mục của nó.Để truy cập một mục, trước tiên bao gồm tên của danh sách và sau đó trong các dấu ngoặc vuông bao gồm số nguyên tương ứng với chỉ mục cho mục bạn muốn truy cập.first include the name of the list and then in square brackets include the integer that corresponds to the index for the item you want to access.

Làm thế nào để bạn chọn nhiều yếu tố trong danh sách Python?

Bạn cũng có thể chọn nhiều mục trong một danh sách.Trong ví dụ này, chúng tôi kêu gọi biến của chúng tôi, List1 và các mục từ 0 đến hai.Python chỉ kéo các mục thứ nhất và thứ hai.Bán kết của dấu ngoặc nói với Python để kéo các mục trong danh sách từ số được ghi nhận đầu tiên (không) đến số cuối cùng nhưng miễn trừ nó (ba).The brackets' semicolon tells python to pull items in the list from the first noted number (zero) to the last number but exempt it(three).

Làm cách nào để nhận được một danh sách các chỉ số trong Python?

Bạn có thể sử dụng liệt kê để có được tất cả các chỉ mục của phần tử trong danh sách.Hàm Enumate () là một hàm tích hợp có sẵn với Python.Nó lấy đầu vào như một đối tượng có thể lặp lại (nghĩa là, một đối tượng có thể được lặp) và đầu ra là một đối tượng có bộ đếm cho mỗi mục.make use of enumerate to get all the indexes of the element in a list. Enumerate() function is a built-in function available with python. It takes input as an iterable object (i.e., an object that can be looped), and the output is an object with a counter to each item.