Tin tức và phân tích của tất cả các thiết bị di động

Làm cách nào để tìm chỉ mục của một phần tử trong danh sách python?

Trong hướng dẫn này, bạn sẽ học cách tìm chỉ mục của một mục trong danh sách Python bằng cách sử dụng cả phép lặp đơn giản và phương thức danh sách index() tích hợp.

Khi làm việc với danh sách python, bạn có thể cần tìm chỉ mục nơi xuất hiện một mục cụ thể. Bạn có thể làm điều này bằng cách:

  • Duyệt danh sách và kiểm tra xem vị trí trong chỉ mục hiện tại có bằng giá trị đã chỉ định không
  • Sử dụng phương thức danh sách index() tích hợp

Bạn sẽ học cả hai điều trên trong hướng dẫn này. Bắt đầu nào.👩🏽‍💻

Danh sách Python, một lần nữa

Trong Python, danh sách là tập hợp các mục có cùng kiểu dữ liệu hoặc khác nhau. Chúng có thể thay đổi được; bạn có thể sửa đổi chúng tại chỗ mà không phải tạo danh sách mới.

Hãy xem xét ví dụ trái cây này: danh sách 5 trái cây khác nhau.

fruits = ["apple","mango","strawberry","pomegranate","melon"]

Độ dài của bất kỳ đối tượng Python nào có thể được lấy bằng cách sử dụng hàm len() tích hợp sẵn. Vì vậy, bạn có thể gọi len() với một đối tượng danh sách (trái cây) làm đối số để lấy độ dài của nó như hình bên dưới.

len(fruits)
# Output: 5

Đối với hướng dẫn này, chúng tôi sẽ sử dụng danh sách các loại trái cây làm ví dụ hoạt động.

Lập chỉ mục trong danh sách python

Python tuân theo chỉ mục null. Vì vậy, trong bất kỳ lần lặp python nào, mục đầu tiên nằm ở chỉ mục 0thứ hai dưới chỉ mục 1 và như thế. Nếu độ dài của phần tử có thể lặp lại là k, thì phần tử cuối cùng nằm ở chỉ mục k – 1.

Trong python, bạn có thể sử dụng hàm range() để lấy các chỉ số khi duyệt qua một lần lặp.

Lưu ý: Đi qua phạm vi (k) bạn nhận được các chỉ số 0,1,2…,(k-1). Vì vậy, bằng cách đặt k = len(list), bạn có thể nhận danh sách tất cả các chỉ mục hợp lệ.

Ô mã sau giải thích nó.

for i in range(len(fruits)):
  print(f"i:{i}, fruit[{i}] is {fruits[i]}")

# Output
i:0, fruit[0] is apple
i:1, fruit[1] is mango
i:2, fruit[2] is strawberry
i:3, fruit[3] is pomegranate
i:4, fruit[4] is melon

Bây giờ chúng ta đã tìm hiểu những kiến ​​thức cơ bản về danh sách trong Python, hãy tìm hiểu cách tìm chỉ mục của một mục trong danh sách.

Tìm chỉ mục của một mục danh sách bằng cách lặp lại bằng vòng lặp

Xem xét danh sách các loại trái cây từ phần trước. Chúng ta sẽ tìm hiểu cách tìm chỉ mục của một mục cụ thể trong danh sách này bằng cách lặp qua vòng lặp for.

Sử dụng hàm loop và range()

Hãy đặt mục tiêu: giá trị chúng tôi đang tìm kiếm trong danh sách.

Bạn có thể sử dụng vòng lặp for và range() để lấy danh sách các chỉ mục từ 0 để lanh (trái cây) – 1.

  • Duyệt danh sách các loại trái cây truy cập từng chỉ mục.
  • Xác minh rằng vị trí trong chỉ mục i hiện tại bằng với giá trị mục tiêu.
  • Nếu Đúng, hãy in mục tiêu đã được tìm thấy trong chỉ mục i.
fruits = ["apple","mango","strawberry","pomegranate","melon"]

target = "mango"

for i in range(len(fruits)):
  if fruits[i] == target:
   print(f"{target} found at index {i}")

# Output
mango found at index 1

Trong ví dụ này, chuỗi mục tiêu “xoài” xuất hiện chính xác một lần (dưới chỉ mục 1) trong danh mục trái cây.

Tuy nhiên, đôi khi mục tiêu xuất hiện nhiều hơn một lần hoặc hoàn toàn không xuất hiện. Để giải quyết những trường hợp này, hãy sửa đổi các vòng lặp ở trên và bọc nội dung bên trong một hàm có tên là find_in_list.

Hiểu định nghĩa hàm

Hàm find_in_list có hai tham số:

  • mục tiêu: giá trị bạn đang tìm kiếm và
  • py_list: danh sách python mà bạn đang tìm kiếm.
def find_in_list(target,py_list):
  target_indices = []
  for i in range(len(fruits)):
    if fruits[i] == target:
      target_indices.append(i)  
  if target_indices == []:
    print("Sorry, target not found!")
  else:
    print(f"{target} is found at indices {target_indices}")

Trong phần thân của hàm, chúng ta khởi tạo một danh sách target_indices trống. Chúng tôi đi qua danh sách và truy cập các phần tử của danh sách. Nếu mục tiêu được tìm thấy tại một chỉ mục cụ thể, chúng tôi sẽ thêm chỉ mục đó vào danh sách target_indices bằng phương thức append().

Lưu ý: Trong Python, list.append(item) thêm một mục vào cuối danh sách.

  • Nếu mục tiêu không bao giờ được tìm thấy, target_indices là một danh sách trống; người dùng được thông báo rằng điểm đến không có trong danh sách.
  • Nếu mục tiêu nằm trên nhiều chỉ mục, thì target_indices chứa tất cả các chỉ mục đó.

Tiếp theo, hãy xác định lại danh sách trái cây như được hiển thị.

Lần này chúng tôi đang tìm kiếm chuỗi mục tiêu “xoài”, xuất hiện hai lần – tại các chỉ mục 1 và 4.

fruits = ["apple","mango","strawberry","pomegranate","mango","melon"]
target = "mango"
find_in_list(target,fruits)

# Output
mango is found at indices [1, 4]

Sau khi gọi hàm find_in_list với các đối số target và fruit, chúng ta thấy rằng cả hai chỉ mục đều được trả về.

target = "turnip"
find_in_list(target,fruits)

# Output
Sorry, target not found!

Nếu bạn cố gắng tìm kiếm “củ cải” không có trong danh sách trái cây, bạn sẽ nhận được thông báo rằng không tìm thấy mục tiêu.

Sử dụng hàm loop và enumerate()

Trong Python, bạn có thể sử dụng hàm enumerate() để truy cập chỉ mục và các phần tử cùng lúc – mà không cần phải sử dụng hàm range().

Ô mã bên dưới cho biết cách bạn có thể sử dụng hàm enumerate() để lấy cả chỉ mục và phần tử.

fruits = ["apple","mango","strawberry","pomegranate","mango","melon"]
for index,fruit in enumerate(fruits):
  print(f"Index {index}: {fruit}")

# Output
Index 0: apple
Index 1: mango
Index 2: strawberry
Index 3: pomegranate
Index 4: mango
Index 5: melon

Bây giờ, hãy viết lại hàm python để tìm chỉ mục của các phần tử trong danh sách bằng cách sử dụng hàm enumerate().

def find_in_list(target,py_list):
  target_indices = []
  for index, fruit in enumerate(fruits):
   if fruit == target:
    target_indices.append(index) 
  if target_indices == []:
    print("Sorry, target not found!")
  else:
    print(f"{target} is found at indices {target_indices}")

Như trong phần trước, bây giờ bạn có thể gọi find_in_list với các đối số hợp lệ.

Bạn có thể dịch định nghĩa hàm ở trên thành một danh sách tổ hợp tương đương và chúng ta sẽ thực hiện điều đó trong phần tiếp theo.

Tìm chỉ mục của một mục danh sách bằng cách lặp lại bằng cách sử dụng khả năng hiểu danh sách

Danh sách kết hợp Python cho phép bạn tạo danh sách từ danh sách hiện có dựa trên các điều kiện nhất định. Đây là cấu trúc chung:

new_list = [<output> for <items in existing iterables> if <condition is true>] 

Hình bên dưới mô tả cách xác định các mục hiểu danh sách; bằng cách này, bạn có thể chuyển đổi hàm find_in_list thành danh sách kết hợp.

Sử dụng cách trên, biểu thức hiểu danh sách để tạo chỉ mục đích như sau.

target_indices = [index for index,fruit in enumerate(fruits) if fruit==target]

Như một bài tập, bạn có thể thử chạy đoạn mã ở trên trên một vài ví dụ khác.

Tìm chỉ mục của một mục danh sách bằng phương thức index()

Để tìm chỉ mục của một mục trong danh sách Python, bạn cũng có thể sử dụng phương thức .index() tích hợp sẵn. Đây là cú pháp chung:

list.index(value,start,end)

Phân tích phương pháp trên:

  • value là giá trị mục tiêu mà bạn đang tìm kiếm.
  • bắt đầu và kết thúc là các đối số vị trí tùy chọn; bạn có thể sử dụng chúng để tìm kiếm để tìm chỉ mục của một mục trong một phần của danh sách bắt đầu từ đầu và kéo dài đến cuối – 1.

Lưu ý: Phương thức .index() chỉ trả về chỉ số của lần xuất hiện đầu tiên của một giá trị trong danh sách. Ngay cả khi bạn tìm thấy chỉ mục của một mục trong lát danh sách [start: end-1]phương thức này chỉ trả về chỉ mục tương ứng với lần xuất hiện đầu tiên của mục.

Hãy quay lại ví dụ của chúng ta để hiểu cách thức hoạt động của phương thức .index().

fruits = ["apple","mango","strawberry","pomegranate","mango","melon"]
target = "mango"

fruits.index(target)
1

Mặc dù có hai lần xuất hiện của “xoài” trong danh sách trái cây, nhưng bạn có thể thấy rằng chỉ có chỉ mục của lần xuất hiện đầu tiên được trả về.

Để lấy chỉ mục của phiên bản xoài thứ hai, chúng ta có thể tìm kiếm lát cắt của danh sách bắt đầu từ chỉ mục 2 và mở rộng đến chỉ mục 5như hình bên dưới.

fruits.index(target,2,5)
4

Làm cách nào để xử lý các lỗi giá trị trong python?

Bây giờ hãy xem điều gì sẽ xảy ra nếu bạn cố gắng tìm chỉ mục của một mục không có trong danh sách, chẳng hạn như “cà rốt”.

target = "carrot"

fruits.index(target)

# Output
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-17-81bd454e44f7> in <module>()
      1 target = "carrot"
      2 
----> 3 fruits.index(target)

ValueError: 'carrot' is not in list

Như bạn có thể thấy trong ô mã ở trên, điều này sẽ gây ra Lỗi Giá trị. Trong Python, bạn có thể xử lý điều này như một ngoại lệ với các khối try andexcept.

Cú pháp chung để sử dụng try-ngoại trừ như sau.

try:
  # to do this
except <ErrorType>:
  # do this to handle <ErrorType> as exception

Sử dụng các khối thử ngoại trừ ở trên, chúng tôi có thể xử lý ValueError như một ngoại lệ.

target = "carrot"
try:
  fruits.index(target)
except ValueError:
  print(f"Sorry, could not find {target} in list")

# Output
Sorry, could not find carrot in list

Đoạn mã trên thực hiện như sau:

  • Nếu mục tiêu nằm trong danh sách, trả về chỉ mục của mục tiêu.
  • Nếu mục tiêu không tồn tại, nó coi ValueError là ngoại lệ và hiển thị thông báo lỗi.

Tóm lại

Dưới đây là tóm tắt các phương pháp tìm kiếm chỉ mục vị trí danh sách Python khác nhau mà bạn đã học.

  • Bạn có thể sử dụng các hàm vòng lặp for và range() của Python để lấy các phần tử và chỉ số của chúng. Xác minh rằng các mục trong chỉ mục phù hợp với mục tiêu.
  • Bạn cũng có thể sử dụng hàm enumerate() để truy cập phần tử và chỉ mục cùng một lúc.
  • Bạn có thể sử dụng cả hai phương pháp trên bên trong một biểu thức danh sách.
  • Bạn cũng có thể sử dụng phương thức .index() tích hợp sẵn để tìm chỉ mục của một mục trong danh sách.
  • list.index(value) trả về chỉ số của lần xuất hiện đầu tiên của một giá trị trong danh sách. Nếu không có giá trị, nó sẽ ném ra một ValueError.
  • Bạn có thể tìm kiếm một lát danh sách cụ thể bằng cách sử dụng list.index(value, start, end) để tìm kiếm sự xuất hiện của một giá trị trong lát danh sách đó [start:end-1].

Sau đó tìm hiểu cách sắp xếp từ điển python theo khóa hoặc theo giá trị. Chúc bạn lập trình Python vui vẻ!