Hướng dẫn how do you find the max and min index in python? - làm cách nào để tìm chỉ số tối đa và tối thiểu 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

5

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ạc228 Huy hiệu Đồng29 gold badges227 silver badges228 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.8K11 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.4071 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àng17 Huy hiệu bạc25 Huy hiệu đồng1 gold badge17 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

52.7K16 Huy hiệu vàng154 Huy hiệu bạc135 Huy hiệu đồng16 gold badges154 silver badges135 bronze badges

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

AndyandyAndy

4814 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.2K25 Huy hiệu vàng186 Huy hiệu bạc227 Huy hiệu đồng25 gold badges186 silver badges227 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.5711 Huy hiệu vàng34 Huy hiệu bạc47 Huy hiệu đồng1 gold badge34 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ạc40 Huy hiệu đồng2 gold badges30 silver badges40 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.9232 Huy hiệu vàng26 Huy hiệu bạc29 Huy hiệu đồng2 gold badges26 silver badges29 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 đa trong Python?

Hàm python max [] hàm tối đa [] hàm trả về mục có giá trị cao nhất hoặc mục có giá trị cao nhất trong một số không thể điều chỉnh được.Nếu các giá trị là chuỗi, một so sánh theo thứ tự bảng chữ cái được thực hiện.The max[] function returns the item with the highest value, or the item with the highest value in an iterable. If the values are strings, an alphabetically comparison is done.

Làm thế nào để bạn có được chỉ số tối đa của một mảng trong Python?

Sử dụng hàm argmax [] trả về chỉ mục của giá trị tối đa đầu tiên. returns the index of the first maximum value.

Làm thế nào để bạn tìm thấy phạm vi chỉ mục 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 ..

Max [] và Min [] là gì?

Tối thiểu chỉ đơn giản là quan sát thấp nhất, trong khi tối đa là quan sát cao nhất.Rõ ràng, việc xác định tối đa và tối đa là dễ nhất nếu dữ liệu được đặt hàng từ thấp nhất đến cao nhất.Vì vậy, đối với dữ liệu của chúng tôi, tối thiểu là 13 và tối đa là 110.. Obviously, it is easiest to determine the min and max if the data are ordered from lowest to highest. So for our data, the min is 13 and the max is 110.

Bài Viết Liên Quan

Chủ Đề