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ụngindex_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ụngimport 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
7import operator min_index, min_value = min[enumerate[values], key=operator.itemgetter[1]] max_index, max_value = max[enumerate[values], key=operator.itemgetter[1]]
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]
3Trong 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]
6Trong 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]
8Hai 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]
9Phươ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]]
4Dò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]]
5Vì 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]]
6Sau đó 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]]
0Nó 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