Hướng dẫn how do i find the smallest index in python? - làm cách nào để tìm chỉ mục nhỏ nhất trong python?

Nói rằng bạn có một danh sách

import operator
min_index, min_value = min[enumerate[values], key=operator.itemgetter[1]]
max_index, max_value = max[enumerate[values], key=operator.itemgetter[1]]
1 và cần chỉ số của phần tử nhỏ nhất, tức là
import operator
min_index, min_value = min[enumerate[values], key=operator.itemgetter[1]]
max_index, max_value = max[enumerate[values], key=operator.itemgetter[1]]
2 trong trường hợp này.

Tránh giải pháp với

import operator
min_index, min_value = min[enumerate[values], key=operator.itemgetter[1]]
max_index, max_value = max[enumerate[values], key=operator.itemgetter[1]]
3 được trình bày trong các câu trả lời khác và thay vào đó sử dụng

index_min = min[range[len[values]], key=values.__getitem__]

bởi vì nó không yêu cầu

import operator
min_index, min_value = min[enumerate[values], key=operator.itemgetter[1]]
max_index, max_value = max[enumerate[values], key=operator.itemgetter[1]]
4 cũng như không sử dụng
import operator
min_index, min_value = min[enumerate[values], key=operator.itemgetter[1]]
max_index, max_value = max[enumerate[values], key=operator.itemgetter[1]]
5 và nó luôn nhanh hơn [điểm chuẩn dưới đây] so với giải pháp sử dụng
import operator
min_index, min_value = min[enumerate[values], key=operator.itemgetter[1]]
max_index, max_value = max[enumerate[values], key=operator.itemgetter[1]]
3.

Nếu bạn đang đối phó với các mảng numpy hoặc có thể đủ khả năng

import operator
min_index, min_value = min[enumerate[values], key=operator.itemgetter[1]]
max_index, max_value = max[enumerate[values], key=operator.itemgetter[1]]
7 như một sự phụ thuộc, hãy xem xét sử dụng

import numpy as np
index_min = np.argmin[values]

Điều này sẽ nhanh hơn giải pháp đầu tiên ngay cả khi bạn áp dụng nó vào danh sách Python thuần túy nếu:

  • Nó lớn hơn một vài yếu tố [khoảng 2 ** 4 phần tử trên máy của tôi]
  • Bạn có thể đủ khả năng bản sao bộ nhớ từ danh sách thuần túy đến mảng
    import operator
    min_index, min_value = min[enumerate[values], key=operator.itemgetter[1]]
    max_index, max_value = max[enumerate[values], key=operator.itemgetter[1]]
    
    7

Như điểm chuẩn này chỉ ra:

Tôi đã chạy điểm chuẩn trên máy của mình với Python 2.7 cho hai giải pháp ở trên [màu xanh lam: python tinh khiết, giải pháp đầu tiên] [giải pháp màu đỏ, numpy] và cho giải pháp tiêu chuẩn dựa trên

import operator
min_index, min_value = min[enumerate[values], key=operator.itemgetter[1]]
max_index, max_value = max[enumerate[values], key=operator.itemgetter[1]]
3 [màu đen, giải pháp tham chiếu]. Cùng một điểm chuẩn với Python 3.5 cho thấy các phương pháp so sánh chính xác giống nhau của trường hợp Python 2.7 được trình bày ở trên

Đã trả lời ngày 6 tháng 8 năm 2012 lúc 9:43Aug 6, 2012 at 9:43

6

if is_min_level:
    return values.index[min[values]]
else:
    return values.index[max[values]]

Đã trả lời ngày 18 tháng 3 năm 2010 lúc 23:23Mar 18, 2010 at 23:23

quá nhiều phptoo nhiều phptoo much php

86.7K34 Huy hiệu vàng128 Huy hiệu bạc135 Huy hiệu đồng34 gold badges128 silver badges135 bronze badges

8

Bạn có thể tìm thấy chỉ mục tối đa/tối đa và giá trị cùng một lúc nếu bạn liệt kê các mục trong danh sách, nhưng thực hiện tối thiểu/tối đa trên các giá trị ban đầu của danh sách. Như vậy:

import operator
min_index, min_value = min[enumerate[values], key=operator.itemgetter[1]]
max_index, max_value = max[enumerate[values], key=operator.itemgetter[1]]

Bằng cách này, danh sách sẽ chỉ được đi qua một lần trong tối thiểu [hoặc tối đa].

Jamylak

124K29 Huy hiệu vàng227 Huy hiệu bạc229 Huy hiệu Đồng29 gold badges227 silver badges229 bronze badges

Đã trả lời ngày 19 tháng 3 năm 2010 lúc 0:18Mar 19, 2010 at 0:18

Matt Andersonmatt AndersonMatt Anderson

18.9k11 Huy hiệu vàng41 Huy hiệu bạc55 Huy hiệu Đồng11 gold badges41 silver badges55 bronze badges

2

Nếu bạn muốn tìm chỉ mục tối đa trong danh sách các số [có vẻ như trường hợp của bạn], thì tôi khuyên bạn nên sử dụng Numpy:

import numpy as np
ind = np.argmax[mylist]

Đã trả lời ngày 23 tháng 11 năm 2012 lúc 17:41Nov 23, 2012 at 17:41

dr.hazdr.hazdr.haz

1.4171 Huy hiệu vàng10 Huy hiệu bạc5 Huy hiệu đồng1 gold badge10 silver badges5 bronze badges

1

Có thể một giải pháp đơn giản hơn sẽ là biến mảng các giá trị thành một mảng giá trị, cặp chỉ mục và lấy tối đa/phút của điều đó. Điều này sẽ cung cấp cho chỉ số lớn nhất/nhỏ nhất có tối đa/phút [nghĩa là các cặp được so sánh bằng cách so sánh đầu tiên phần tử thứ nhất và sau đó so sánh phần tử thứ hai nếu các cặp đầu tiên giống nhau]. Lưu ý rằng không cần thiết phải thực sự tạo mảng, bởi vì MIN/MAX cho phép các trình tạo làm đầu vào.

values = [3,4,5]
[m,i] = max[[v,i] for i,v in enumerate[values]]
print [m,i] #[5, 2]

Đã trả lời ngày 21 tháng 12 năm 2012 lúc 11:53Dec 21, 2012 at 11:53

Ant6nAnt6nAnt6n

1.7781 Huy hiệu vàng18 Huy hiệu bạc25 Huy hiệu đồng1 gold badge18 silver badges25 bronze badges

0

seq=[1.1412, 4.3453, 5.8709, 0.1314]
seq.index[min[seq]]

Sẽ cung cấp cho bạn chỉ số đầu tiên về tối thiểu.

Asclepius

53K16 Huy hiệu vàng154 Huy hiệu bạc137 Huy hiệu đồng16 gold badges154 silver badges137 bronze badges

Đã trả lời ngày 7 tháng 9 năm 2013 lúc 21:30Sep 7, 2013 at 21:30

AndyandyAndy

4914 Huy hiệu bạc3 Huy hiệu đồng4 silver badges3 bronze badges

0

Tôi nghĩ rằng điều tốt nhất cần làm là chuyển đổi danh sách thành

import numpy as np
ind = np.argmax[mylist]
0 và sử dụng chức năng này:

a = np.array[list]
idx = np.argmax[a]

Đã trả lời ngày 5 tháng 1 năm 2019 lúc 6:24Jan 5, 2019 at 6:24

0

Tôi cũng quan tâm đến điều này và so sánh một số giải pháp được đề xuất bằng cách sử dụng perfplot [một dự án thú cưng của tôi].

Hóa ra rằng

min[range[len[a]], key=a.__getitem__]

là phương pháp nhanh nhất cho danh sách nhỏ và lớn.

[Trong các phiên bản cũ,

import numpy as np
ind = np.argmax[mylist]
1 được sử dụng để lấy bánh.]

Mã để tạo cốt truyện:

import numpy as np
import operator
import perfplot


def min_enumerate[a]:
    return min[enumerate[a], key=lambda x: x[1]][0]


def min_enumerate_itemgetter[a]:
    min_index, min_value = min[enumerate[a], key=operator.itemgetter[1]]
    return min_index


def getitem[a]:
    return min[range[len[a]], key=a.__getitem__]


def np_argmin[a]:
    return np.argmin[a]


b = perfplot.bench[
    setup=lambda n: np.random.rand[n].tolist[],
    kernels=[
        min_enumerate,
        min_enumerate_itemgetter,
        getitem,
        np_argmin,
    ],
    n_range=[2**k for k in range[15]],
]
b.show[]

Đã trả lời ngày 23 tháng 5 năm 2017 lúc 7:58May 23, 2017 at 7:58

Nico Schlömernico SchlömerNico Schlömer

49.4K25 Huy hiệu vàng186 Huy hiệu bạc229 Huy hiệu đồng25 gold badges186 silver badges229 bronze badges

3

Tôi nghĩ rằng câu trả lời ở trên giải quyết vấn đề của bạn nhưng tôi nghĩ rằng tôi sẽ chia sẻ một phương pháp cung cấp cho bạn mức tối thiểu và tất cả các chỉ số tối thiểu xuất hiện.

import numpy as np
index_min = np.argmin[values]
0

Điều này vượt qua danh sách hai lần nhưng vẫn còn khá nhanh. Tuy nhiên, nó chậm hơn một chút so với việc tìm kiếm chỉ số của cuộc gặp gỡ đầu tiên của mức tối thiểu. Vì vậy, nếu bạn chỉ cần một trong những cực tiểu, hãy sử dụng giải pháp của Matt Anderson, nếu bạn cần tất cả, hãy sử dụng điều này.

Đã trả lời ngày 14 tháng 4 năm 2011 lúc 18:22Apr 14, 2011 at 18:22

4

Sau khi bạn nhận được các giá trị tối đa, hãy thử điều này:

import numpy as np
index_min = np.argmin[values]
1

Đơn giản hơn nhiều so với rất nhiều lựa chọn.

Đã trả lời ngày 11 tháng 1 năm 2018 lúc 16:57Jan 11, 2018 at 16:57

alpha_989alpha_989alpha_989

4.5712 Huy hiệu vàng34 Huy hiệu bạc47 Huy hiệu đồng2 gold badges34 silver badges47 bronze badges

Sử dụng một mảng numpy và hàm argmax []

import numpy as np
index_min = np.argmin[values]
2

Đã trả lời ngày 29 tháng 1 năm 2018 lúc 18:07Jan 29, 2018 at 18:07

0

Pandas hiện đã có một giải pháp nhẹ nhàng hơn nhiều, hãy thử nó:

import numpy as np
ind = np.argmax[mylist]
2

Đã trả lời ngày 10 tháng 8 năm 2020 lúc 9:44Aug 10, 2020 at 9:44

Điều này chỉ đơn giản là có thể sử dụng hàm

import numpy as np
ind = np.argmax[mylist]
3 và
import numpy as np
ind = np.argmax[mylist]
4 tích hợp và đối số
import numpy as np
ind = np.argmax[mylist]
5 tùy chọn của hàm
import numpy as np
ind = np.argmax[mylist]
4 và biểu thức Lambda đơn giản:

import numpy as np
index_min = np.argmin[values]
3

Trong các tài liệu cho

import numpy as np
ind = np.argmax[mylist]
4, nó nói rằng đối số
import numpy as np
ind = np.argmax[mylist]
5 mong đợi một hàm như trong hàm
import numpy as np
ind = np.argmax[mylist]
9. Cũng xem phân loại làm thế nào để.

Nó hoạt động giống nhau cho

values = [3,4,5]
[m,i] = max[[v,i] for i,v in enumerate[values]]
print [m,i] #[5, 2]
0. BTW nó trả về giá trị tối đa/phút đầu tiên.

Đã trả lời ngày 28 tháng 10 năm 2016 lúc 9:35Oct 28, 2016 at 9:35

Simon Hänischsimon HänischSimon Hänisch

4.4352 Huy hiệu vàng30 Huy hiệu bạc41 Huy hiệu Đồng2 gold badges30 silver badges41 bronze badges

2

Sử dụng chức năng của mô -đun Numpy.

import numpy as np
index_min = np.argmin[values]
4

Đối với chỉ mục của giá trị tối thiểu:

import numpy as np
index_min = np.argmin[values]
5

Đối với chỉ mục của giá trị tối đa:

import numpy as np
index_min = np.argmin[values]
6

Trong thực tế, chức năng này mạnh hơn nhiều. Bạn có thể đặt ra tất cả các loại hoạt động boolean cho chỉ mục giá trị từ 3 đến 60:

import numpy as np
index_min = np.argmin[values]
7

Đã trả lời ngày 16 tháng 4 năm 2015 lúc 8:29Apr 16, 2015 at 8:29

Ishan Tomarishan TomarIshan Tomar

1.4281 Huy hiệu vàng16 Huy hiệu bạc20 Huy hiệu Đồng1 gold badge16 silver badges20 bronze badges

4

Nói rằng bạn có một danh sách như:

import numpy as np
index_min = np.argmin[values]
8

Hai phương pháp sau đây là những cách khá nhỏ gọn để có được một phần tử với phần tử tối thiểu và chỉ mục của nó. Cả hai đều mất một thời gian tương tự để xử lý. Tôi tốt hơn là phương pháp zip, nhưng đó là sở thích của tôi.similar time to process. I better like the zip method, but that is my taste.

Phương pháp zip

import numpy as np
index_min = np.argmin[values]
9

Phương pháp liệt kê

if is_min_level:
    return values.index[min[values]]
else:
    return values.index[max[values]]
0

Đã trả lời ngày 26 tháng 2 năm 2018 lúc 10:29Feb 26, 2018 at 10:29

Pablo MPAPABLO MPAPablo MPA

611 Huy hiệu bạc3 Huy hiệu đồng1 silver badge3 bronze badges

Tại sao phải thêm các chỉ số trước và sau đó đảo ngược chúng? Hàm liệt kê [] chỉ là một trường hợp đặc biệt của sử dụng hàm zip []. Hãy sử dụng nó theo cách phù hợp:

if is_min_level:
    return values.index[min[values]]
else:
    return values.index[max[values]]
1

Đã trả lời ngày 17 tháng 3 năm 2015 lúc 13:45Mar 17, 2015 at 13:45

Miễn là bạn biết cách sử dụng Lambda và đối số "khóa", một giải pháp đơn giản là:

if is_min_level:
    return values.index[min[values]]
else:
    return values.index[max[values]]
2

Đã trả lời ngày 24 tháng 1 năm 2017 lúc 22:41Jan 24, 2017 at 22:41

VeigaveigaVeiga

Phim huy hiệu bạc 21211 silver badge9 bronze badges

1

Đơn giản như thế :

if is_min_level:
    return values.index[min[values]]
else:
    return values.index[max[values]]
3

Đã trả lời ngày 12 tháng 3 năm 2017 lúc 19:51Mar 12, 2017 at 19:51

Chỉ là một bổ sung nhỏ cho những gì đã được nói.

values = [3,4,5]
[m,i] = max[[v,i] for i,v in enumerate[values]]
print [m,i] #[5, 2]
1 dường như trả về chỉ số nhỏ nhất của Min. Những điều sau đây có chỉ số lớn nhất:

if is_min_level:
    return values.index[min[values]]
else:
    return values.index[max[values]]
4

Dòng cuối cùng có thể được bỏ qua nếu tác dụng phụ của việc đảo ngược tại chỗ không quan trọng.

Lặp lại qua tất cả các lần xuất hiện

if is_min_level:
    return values.index[min[values]]
else:
    return values.index[max[values]]
5

Vì lợi ích của ngắn gọn. Có lẽ đó là một ý tưởng tốt hơn để lưu trữ

values = [3,4,5]
[m,i] = max[[v,i] for i,v in enumerate[values]]
print [m,i] #[5, 2]
2 bên ngoài vòng lặp.

Đã trả lời ngày 6 tháng 4 năm 2012 lúc 16:09Apr 6, 2012 at 16:09

1

Một cách đơn giản để tìm các chỉ mục có giá trị tối thiểu trong danh sách nếu bạn không muốn nhập các mô -đun bổ sung:

if is_min_level:
    return values.index[min[values]]
else:
    return values.index[max[values]]
6

Sau đó chọn ví dụ như cái đầu tiên:

if is_min_level:
    return values.index[min[values]]
else:
    return values.index[max[values]]
7

Đã trả lời ngày 9 tháng 8 năm 2016 lúc 12:17Aug 9, 2016 at 12:17

Giả sử bạn có một danh sách sau

values = [3,4,5]
[m,i] = max[[v,i] for i,v in enumerate[values]]
print [m,i] #[5, 2]
3 và chúng tôi biết rằng nếu chúng tôi làm
values = [3,4,5]
[m,i] = max[[v,i] for i,v in enumerate[values]]
print [m,i] #[5, 2]
4, nó sẽ trả lại
values = [3,4,5]
[m,i] = max[[v,i] for i,v in enumerate[values]]
print [m,i] #[5, 2]
5 và
values = [3,4,5]
[m,i] = max[[v,i] for i,v in enumerate[values]]
print [m,i] #[5, 2]
6 sẽ trả về
values = [3,4,5]
[m,i] = max[[v,i] for i,v in enumerate[values]]
print [m,i] #[5, 2]
7. Bây giờ chúng tôi muốn có được chỉ số của phần tử tối đa hoặc tối thiểu mà chúng tôi có thể làm như sau.

if is_min_level:
    return values.index[min[values]]
else:
    return values.index[max[values]]
8

Đã trả lời ngày 14 tháng 11 năm 2020 lúc 12:05Nov 14, 2020 at 12:05

Hadi Mirhadi MirHadi Mir

3.9332 Huy hiệu vàng26 Huy hiệu bạc 30 Huy hiệu Đồng2 gold badges26 silver badges30 bronze badges

//docs.python.org/3/library/functions.html#max

Nếu nhiều mục là tối đa, chức năng trả về mục đầu tiên gặp phải. Điều này phù hợp với các công cụ bảo quản ổn định sắp xếp khác như

values = [3,4,5]
[m,i] = max[[v,i] for i,v in enumerate[values]]
print [m,i] #[5, 2]
8

Để nhận được nhiều hơn chỉ là lần gặp đầu tiên, hãy sử dụng phương thức sắp xếp.

if is_min_level:
    return values.index[min[values]]
else:
    return values.index[max[values]]
9

Đã trả lời ngày 17 tháng 9 năm 2015 lúc 20:42Sep 17, 2015 at 20:42

Demzthe DemzThe Demz

6.8865 huy hiệu vàng37 Huy hiệu bạc42 Huy hiệu đồng5 gold badges37 silver badges42 bronze badges

Cái này thì sao:

import operator
min_index, min_value = min[enumerate[values], key=operator.itemgetter[1]]
max_index, max_value = max[enumerate[values], key=operator.itemgetter[1]]
0

Nó tạo ra một từ điển từ các mục trong

values = [3,4,5]
[m,i] = max[[v,i] for i,v in enumerate[values]]
print [m,i] #[5, 2]
9 dưới dạng các khóa và chỉ mục của chúng là giá trị, do đó
seq=[1.1412, 4.3453, 5.8709, 0.1314]
seq.index[min[seq]]
0 trả về giá trị tương ứng với khóa
seq=[1.1412, 4.3453, 5.8709, 0.1314]
seq.index[min[seq]]
1 là chỉ số tối đa trong a. Tôi là người mới bắt đầu trong Python nên tôi không biết về sự phức tạp tính toán của giải pháp này.

Đã trả lời ngày 12 tháng 10 năm 2019 lúc 9:10Oct 12, 2019 at 9:10

Làm thế nào để bạn tìm thấy giá trị tối thiểu của một chỉ mục?

Sử dụng các hàm min [] và list.index [] để có được chỉ mục nhỏ nhất của danh sách.Trong Python, phương thức min [] sẽ trả về giá trị nhỏ nhất của danh sách được xác định.Chỉ số nhỏ nhất của phần tử trong danh sách được trả về bởi l. index[] Functions to Get the Smallest Index of the List. In Python, the min[] method will return the smallest value of the defined list. The smallest index of the element in the list is returned by the l.

Làm thế nào để bạn tìm thấy số nhỏ nhất trong một chỉ mục danh sách?

Danh sách sử dụng ...
a_list = [3, 2, 1].
min_value = min [a_list] Tìm giá trị tối thiểu của `a_list`.
min_index = a_list.Chỉ mục [MIN_VALUE] Tìm chỉ mục của giá trị tối thiểu ..
print[min_index].

Chỉ số thấp nhất trong Python là gì?

Chỉ mục trong Python bắt đầu từ 0.0.

Làm thế nào để tôi tìm thấy giá trị nhỏ nhất trong một mảng trong Python?

Python cung cấp chức năng sẵn có khác nhau.Min [] được sử dụng để tìm ra giá trị tối thiểu trong một mảng, Max [] được sử dụng để tìm ra giá trị tối đa trong một mảng.Index [] được sử dụng để tìm chỉ số của phần tử.min[] is used for find out minimum value in an array, max[] is used for find out maximum value in an array. index[] is used for finding the index of the element.

Bài Viết Liên Quan

Chủ Đề