Hướng dẫn python get index of object in list by attribute - python lấy chỉ mục của đối tượng trong danh sách theo thuộc tính

Tôi có danh sách các đối tượng có ID thuộc tính và tôi muốn tìm chỉ mục đối tượng với ID cụ thể. Tôi đã viết một cái gì đó như thế này:

index = -1
for i in range(len(my_list)):
    if my_list[i].id == 'specific_id'
        index = i
        break

Nhưng nó trông không tốt lắm. Có bất kỳ lựa chọn tốt hơn?

Đã hỏi ngày 3 tháng 10 năm 2013 lúc 14:48Oct 3, 2013 at 14:48

Hướng dẫn python get index of object in list by attribute - python lấy chỉ mục của đối tượng trong danh sách theo thuộc tính

1

Sử dụng

for index, item in enumerate(my_list):
    if item.id == 'specific_id':
        break
else:
    index = -1
2 Khi bạn muốn cả hai giá trị và chỉ số trong vòng lặp
for index, item in enumerate(my_list):
    if item.id == 'specific_id':
        break
else:
    index = -1
3:

for index, item in enumerate(my_list):
    if item.id == 'specific_id':
        break
else:
    index = -1

Hoặc, như một biểu thức máy phát:

index = next((i for i, item in enumerate(my_list) if item.id == 'specific_id'), -1)

Đã trả lời ngày 3 tháng 10 năm 2013 lúc 14:50Oct 3, 2013 at 14:50

Hướng dẫn python get index of object in list by attribute - python lấy chỉ mục của đối tượng trong danh sách theo thuộc tính

Joel Cornettjoel CornettJoel Cornett

23,5K9 Huy hiệu vàng60 Huy hiệu bạc85 Huy hiệu Đồng9 gold badges60 silver badges85 bronze badges

2

Đây là một giải pháp thay thế không sử dụng vòng lặp (rõ ràng), với hai cách tiếp cận khác nhau để tạo danh sách các giá trị 'ID' từ danh sách ban đầu.

try:
    # index = map(operator.attrgetter('id'), my_list).index('specific_id')
    index = [ x.id for x in my_list ].index('specific_id')
except ValueError:
    index = -1

Đã trả lời ngày 3 tháng 10 năm 2013 lúc 15:05Oct 3, 2013 at 15:05

Chepnerchepnerchepner

464K68 Huy hiệu vàng488 Huy hiệu bạc631 Huy hiệu Đồng68 gold badges488 silver badges631 bronze badges

2

Bạn có thể sử dụng

for index, item in enumerate(my_list):
    if item.id == 'specific_id':
        break
else:
    index = -1
2:

for index, item in enumerate(my_list):
    if item.id == 'specific_id':
        break

Đã trả lời ngày 3 tháng 10 năm 2013 lúc 14:49Oct 3, 2013 at 14:49

Daniel Rosemandaniel RosemanDaniel Roseman

576K61 Huy hiệu vàng844 Huy hiệu bạc857 Huy hiệu đồng61 gold badges844 silver badges857 bronze badges

Thực hiện phương thức

for index, item in enumerate(my_list):
    if item.id == 'specific_id':
        break
else:
    index = -1
5 cho lớp của bạn

class MyCls:
   def __init__(self, id):
       self.id = id

   def __eq__(self, other):
       # comparing with str since you want to compare
       # your object with str

       if not isinstance(other, str):
           raise TypeError("MyCls can be compared only with str")
       if other == self.id:
           return True
       return False

Bây giờ bạn có thể làm một cái gì đó như

my_list = [MyCls(i) for i in 'abcdef']
print(my_list.index('c'))

Điều này sẽ trả về chỉ mục 2. Nó sẽ hoạt động như các phương thức Danh sách thông thường. Các phương thức hoạt động. tức là nếu nó không tìm thấy chỉ mục, nó sẽ tăng giá trị hoeRror

Đã trả lời ngày 11 tháng 2 năm 2021 lúc 14:20Feb 11, 2021 at 14:20

Patel Devenpatel Devenpatel deven

5706 Huy hiệu bạc9 Huy hiệu Đồng6 silver badges9 bronze badges

Giả định

a = [1,2,3,4]
val = 3

Làm

a.index(val) if val in a else -1

Đối với nhiều lần xuất hiện, theo nhận xét của Azam dưới đây:

[i if val == x else -1 for i,x in enumerate(a)] 

Edit1: Đối với mọi người nhận xét rằng danh sách đối tượng của nó, tất cả những gì bạn cần là, truy cập

for index, item in enumerate(my_list):
    if item.id == 'specific_id':
        break
else:
    index = -1
6

for index, item in enumerate(my_list):
    if item.id == 'specific_id':
        break
else:
    index = -1
0

Đã trả lời ngày 27 tháng 5 năm 2017 lúc 6:09May 27, 2017 at 6:09

Hướng dẫn python get index of object in list by attribute - python lấy chỉ mục của đối tượng trong danh sách theo thuộc tính

AbhishekabhishekAbhishek

3.2574 Huy hiệu vàng30 Huy hiệu bạc 50 Huy hiệu Đồng4 gold badges30 silver badges50 bronze badges

3

Xem thảo luận

Cải thiện bài viết

Lưu bài viết

  • Đọc
  • Bàn luận
  • Xem thảo luận

    Cải thiện bài viết

    Lưu bài viết

    Trong bài viết này, chúng tôi sẽ xem xét cách tìm chỉ mục của một mục trong danh sách bằng cách sử dụng một thuộc tính trong Python. Chúng tôi sẽ sử dụng chức năng liệt kê để thực hiện việc này. & NBSP;

    Hàm liệt kê () tạo ra một bộ đếm đếm số lần lặp được lặp lại bao nhiêu lần. Chúng tôi không cần nhập các thư viện bổ sung để sử dụng hàm liệt kê () vì nó tích hợp vào Python. Nếu chúng ta sử dụng chức năng liệt kê () thì chúng ta không phải lo lắng về việc đưa ra một câu lệnh phạm vi () và sau đó lấy độ dài của một mảng. Hàm liệt kê duy trì hai giá trị: chỉ mục của mục và giá trị của nó. & NBSP;enumerate() function produces a counter that counts how many times a loop has been iterated. We don’t need to import additional libraries to utilize the enumerate() function because it’s built-in to Python. If we use enumerate function() then we don’t have to worry about making a range() statement and then retrieving the length of an array. The enumerate function maintains two values: the item’s index and its value. 

    Cú pháp: liệt kê (có thể lặp lại, bắt đầu = 0)enumerate(iterable, start=0)

    Parameters:

    • Có thể lặp lại: Bất kỳ đối tượng nào hỗ trợ lặp lại
    • bắt đầu: giá trị chỉ mục mà bộ đếm
    • Để được bắt đầu, theo mặc định, nó là 0

    Python3

    for index, item in enumerate(my_list):
        if item.id == 'specific_id':
            break
    else:
        index = -1
    
    7
    for index, item in enumerate(my_list):
        if item.id == 'specific_id':
            break
    else:
        index = -1
    
    8

    for index, item in enumerate(my_list):
        if item.id == 'specific_id':
            break
    else:
        index = -1
    
    9
    index = next((i for i, item in enumerate(my_list) if item.id == 'specific_id'), -1)
    
    0
    index = next((i for i, item in enumerate(my_list) if item.id == 'specific_id'), -1)
    
    1
    index = next((i for i, item in enumerate(my_list) if item.id == 'specific_id'), -1)
    
    2223

    index = next((i for i, item in enumerate(my_list) if item.id == 'specific_id'), -1)
    
    4
    index = next((i for i, item in enumerate(my_list) if item.id == 'specific_id'), -1)
    
    226____26____27
    index = next((i for i, item in enumerate(my_list) if item.id == 'specific_id'), -1)
    
    8

    index = next((i for i, item in enumerate(my_list) if item.id == 'specific_id'), -1)
    
    0
    try:
        # index = map(operator.attrgetter('id'), my_list).index('specific_id')
        index = [ x.id for x in my_list ].index('specific_id')
    except ValueError:
        index = -1
    
    0

    for index, item in enumerate(my_list):
        if item.id == 'specific_id':
            break
    else:
        index = -1
    
    9
    for index, item in enumerate(my_list):
        if item.id == 'specific_id':
            break
    else:
        index = -1
    
    3
    try:
        # index = map(operator.attrgetter('id'), my_list).index('specific_id')
        index = [ x.id for x in my_list ].index('specific_id')
    except ValueError:
        index = -1
    
    3
    try:
        # index = map(operator.attrgetter('id'), my_list).index('specific_id')
        index = [ x.id for x in my_list ].index('specific_id')
    except ValueError:
        index = -1
    
    4
    for index, item in enumerate(my_list):
        if item.id == 'specific_id':
            break
    else:
        index = -1
    
    2
    try:
        # index = map(operator.attrgetter('id'), my_list).index('specific_id')
        index = [ x.id for x in my_list ].index('specific_id')
    except ValueError:
        index = -1
    
    6

    index = next((i for i, item in enumerate(my_list) if item.id == 'specific_id'), -1)
    
    4
    try:
        # index = map(operator.attrgetter('id'), my_list).index('specific_id')
        index = [ x.id for x in my_list ].index('specific_id')
    except ValueError:
        index = -1
    
    8
    try:
        # index = map(operator.attrgetter('id'), my_list).index('specific_id')
        index = [ x.id for x in my_list ].index('specific_id')
    except ValueError:
        index = -1
    
    9
    index = next((i for i, item in enumerate(my_list) if item.id == 'specific_id'), -1)
    
    7
    index = next((i for i, item in enumerate(my_list) if item.id == 'specific_id'), -1)
    
    7
    for index, item in enumerate(my_list):
        if item.id == 'specific_id':
            break
    
    2

    for index, item in enumerate(my_list):
        if item.id == 'specific_id':
            break
    
    3
    for index, item in enumerate(my_list):
        if item.id == 'specific_id':
            break
    
    4
    for index, item in enumerate(my_list):
        if item.id == 'specific_id':
            break
    
    5

    for index, item in enumerate(my_list):
        if item.id == 'specific_id':
            break
    else:
        index = -1
    
    9
    for index, item in enumerate(my_list):
        if item.id == 'specific_id':
            break
    
    4
    for index, item in enumerate(my_list):
        if item.id == 'specific_id':
            break
    
    8
    for index, item in enumerate(my_list):
        if item.id == 'specific_id':
            break
    
    9

    class MyCls:
       def __init__(self, id):
           self.id = id
    
       def __eq__(self, other):
           # comparing with str since you want to compare
           # your object with str
    
           if not isinstance(other, str):
               raise TypeError("MyCls can be compared only with str")
           if other == self.id:
               return True
           return False
    
    0
    index = next((i for i, item in enumerate(my_list) if item.id == 'specific_id'), -1)
    
    7
    class MyCls:
       def __init__(self, id):
           self.id = id
    
       def __eq__(self, other):
           # comparing with str since you want to compare
           # your object with str
    
           if not isinstance(other, str):
               raise TypeError("MyCls can be compared only with str")
           if other == self.id:
               return True
           return False
    
    2
    for index, item in enumerate(my_list):
        if item.id == 'specific_id':
            break
    
    9
    class MyCls:
       def __init__(self, id):
           self.id = id
    
       def __eq__(self, other):
           # comparing with str since you want to compare
           # your object with str
    
           if not isinstance(other, str):
               raise TypeError("MyCls can be compared only with str")
           if other == self.id:
               return True
           return False
    
    4__555554545754545459

    my_list = [MyCls(i) for i in 'abcdef']
    print(my_list.index('c'))
    
    5
    index = next((i for i, item in enumerate(my_list) if item.id == 'specific_id'), -1)
    
    7
    my_list = [MyCls(i) for i in 'abcdef']
    print(my_list.index('c'))
    
    7
    my_list = [MyCls(i) for i in 'abcdef']
    print(my_list.index('c'))
    
    8

    for index, item in enumerate(my_list):
        if item.id == 'specific_id':
            break
    else:
        index = -1
    
    3
    a = [1,2,3,4]
    val = 3
    
    0
    try:
        # index = map(operator.attrgetter('id'), my_list).index('specific_id')
        index = [ x.id for x in my_list ].index('specific_id')
    except ValueError:
        index = -1
    
    4
    a = [1,2,3,4]
    val = 3
    
    2

    for index, item in enumerate(my_list):
        if item.id == 'specific_id':
            break
    else:
        index = -1
    
    9
    a = [1,2,3,4]
    val = 3
    
    4

    a = [1,2,3,4]
    val = 3
    
    5
    a = [1,2,3,4]
    val = 3
    
    6
    class MyCls:
       def __init__(self, id):
           self.id = id
    
       def __eq__(self, other):
           # comparing with str since you want to compare
           # your object with str
    
           if not isinstance(other, str):
               raise TypeError("MyCls can be compared only with str")
           if other == self.id:
               return True
           return False
    
    7
    a = [1,2,3,4]
    val = 3
    
    8

    Output:

    for index, item in enumerate(my_list):
        if item.id == 'specific_id':
            break
    else:
        index = -1
    
    1

    Trong mã này, trước tiên chúng tôi xây dựng một lớp X, ví dụ, với Val thuộc tính. Bây giờ chúng tôi sẽ viết một chức năng cho tác vụ của chúng tôi (ở đây chúng tôi đã gọi nó là getindex ()) sẽ trả về chỉ mục của mục chúng tôi đang tìm kiếm bằng cách sử dụng thuộc tính hoặc -1 nếu mục không tồn tại trong danh sách của chúng tôi . Chúng tôi sẽ sử dụng phương thức liệt kê trong getindex () và như bạn có thể thấy, chúng tôi đã sử dụng hai biến trong vòng lặp cho vòng lặp (index và x) vì hàm liệt kê theo dõi chỉ mục và giá trị của mục và chúng tôi cần phải Lưu trữ cả hai giá trị để hoàn thành nhiệm vụ của chúng tôi. Chúng tôi có một điều kiện IF bên trong vòng lặp của chúng tôi cho biết nếu thuộc tính Val của mục X từ danh sách có cùng giá trị với giá trị đích, thì hãy trả về giá trị chỉ mục của nó. Hàm liệt kê cung cấp các giá trị chỉ mục này. Bây giờ hãy để Lôi nhìn vào cách nó hoạt động. Chúng tôi đã xác định một danh sách, ví dụ, trong biến LI và chúng tôi sẽ chuyển đổi danh sách các giá trị số nguyên này thành một danh sách các đối tượng. Bây giờ, chúng tôi đã chuyển danh sách này cho hàm getindex, cùng với giá trị mục tiêu mà tôi đã tìm kiếm một chỉ mục.

    Làm thế nào để bạn tìm thấy chỉ mục của một đối tượng trong danh sách trong Python?

    Tìm chỉ mục của một mục bằng phương thức Danh sách () trong Python..
    my_list là tên của danh sách bạn đang tìm kiếm qua ..
    . Index () là phương thức tìm kiếm có ba tham số. ....
    Mục là tham số cần thiết. ....
    Bắt đầu là tham số tùy chọn đầu tiên. ....
    Kết thúc tham số tùy chọn thứ hai ..

    Làm thế nào bạn sẽ có được chỉ mục của một đối tượng trong một danh sách?

    Phương thức Index () trả về chỉ mục của phần tử được chỉ định trong danh sách ...
    Phần tử - Phần tử sẽ được tìm kiếm ..
    Bắt đầu (Tùy chọn) - Bắt đầu tìm kiếm từ chỉ mục này ..
    End (Tùy chọn) - Tìm kiếm phần tử lên đến chỉ mục này ..

    Làm thế nào để bạn tìm thấy chỉ mục của một chuỗi cụ thể trong danh sách Python?

    Bằng cách sử dụng toán tử loại (), chúng ta có thể lấy các chỉ mục phần tử chuỗi từ danh sách, các phần tử chuỗi sẽ thuộc loại str (), vì vậy chúng ta lặp lại toàn bộ danh sách với vòng lặp và trả về chỉ mục loại chuỗi., string elements will come under str() type, so we iterate through the entire list with for loop and return the index which is of type string.

    Làm thế nào để bạn có được vị trí của một nhân vật trong danh sách Python?

    Phương pháp 1: Lấy vị trí của một ký tự trong python bằng phương thức rfind () python chuỗi rfind () trả về chỉ số cao nhất của chuỗi con nếu được tìm thấy trong chuỗi đã cho.Nếu không tìm thấy thì nó sẽ trả về -1.using rfind() Python String rfind() method returns the highest index of the substring if found in the given string. If not found then it returns -1.