2016-09-28 27 views
6

tôi có một danh sách python đó là như thế này,Tìm giá trị và chỉ mục tối đa trong danh sách python?

[[12587961, 0.7777777777777778], [12587970, 0.5172413793103449], [12587979, 0.3968253968253968], [12587982, 0.88], [12587984, 0.8484848484848485], [12587992, 0.7777777777777778], [12587995, 0.8070175438596491], [12588015, 0.4358974358974359], [12588023, 0.8985507246376812], [12588037, 0.5555555555555555], [12588042, 0.9473684210526315]] 

Danh sách này có thể lên đến hàng ngàn yếu tố chiều dài, làm thế nào tôi có thể nhận được giá trị lớn nhất trong danh sách theo mục thứ hai trong tiểu mảng , và nhận được chỉ số của giá trị tối đa là phần tử nắm tay trong mảng phụ trong python?

+0

Bạn đang @unwind đúng. Tôi nghĩ anh ta muốn tìm tất cả các phần tử có giá trị tối đa theo phần tử thứ hai và tìm ra tối đa các phần tử dựa trên giá trị đầu tiên. – thefourtheye

+0

cũng xin lỗi nếu các bạn không nhận được nó, nó như thế này tôi muốn subarray với giá trị tối đa thứ hai, giá trị thứ hai có nghĩa là [1] thứ mục trong một subarray – rksh

+0

Được rồi ... Tôi vẫn đấu tranh để hiểu. Một ví dụ nhỏ trên ví dụ một danh sách bốn phần tử sẽ hữu ích. Nhưng tôi đoán nó đã được giải quyết rồi. – unwind

Trả lời

11

Sử dụng hàm max và tham số key, chỉ sử dụng yếu tố thứ hai để so sánh các phần tử của danh sách.

Ví dụ,

>>> data = [[12587961, 0.7777777777777778], [12587970, 0.5172413793103449], [12587979, 0.3968253968253968].... [12588042, 0.9473684210 
526315]] 
>>> max(data, key=lambda item: item[1]) 
[12588042, 0.9473684210526315] 

Bây giờ, nếu bạn muốn chỉ là yếu tố đầu tiên, sau đó bạn có thể chỉ đơn giản là có được phần tử đầu tiên một mình, hoặc chỉ cần giải nén kết quả, như thế này

>>> index, value = max(data, key=lambda item: item[1]) 
>>> index 
12588042 
>>> value 
0.9473684210526315 

Chỉnh sửa: Nếu bạn muốn tìm chỉ mục tối đa (giá trị đầu tiên) trong số tất cả các phần tử có giá trị lớn nhất (giá trị thứ hai), thì bạn có thể làm như thế này

>>> _, max_value = max(data, key=lambda item: item[1]) 
>>> max(index for index, value in data if value == max_value) 

Bạn có thể làm như vậy trong một lần lặp duy nhất, như

max_index = float("-inf") 
max_value = float("-inf") 

for index, value in data: 
     if value > max_value: 
      max_value = value 
      max_index = index 
     elif value == max_value: 
      max_index = max(max_index, index) 
+0

Cảm ơn những gì tôi muốn là một thứ giống như bạn đã đề cập trong câu trả lời gốc, subarray với giá trị thứ hai maxumum trong subarray :) có cách để lấy số n mảng với giá trị lớn nhất, như 10 giá trị cao nhất :) – rksh

+0

@rksh Bạn nên đưa ra các ví dụ thích hợp. Các từ chỉ đơn giản là khó hiểu. – thefourtheye

+0

ok tôi sẽ lấy một ví dụ đơn giản nếu có một mảng như thế này '' 'dữ liệu = [1,2,5,7,6,8,3,9,4]' '' làm thế nào tôi có thể nhận được ba giá trị tối đa ? trong trường hợp này, nó là '' '7,8,9''' – rksh

0
from operator import itemgetter 

a = [[12587961, 0.7777777777777778], [12587970, 0.5172413793103449], [12587979, 0.3968253968253968], [12587982, 0.88], [12587984, 0.8484848484848485], [12587992, 0.7777777777777778], [12587995, 0.8070175438596491], [12588015, 0.4358974358974359], [12588023, 0.8985507246376812], [12588037, 0.5555555555555555], [12588042, 0.9473684210526315]] 

max(a, key=itemgetter(1))[0] 
// => 12588042 
3

này Sử dụng max với một chìa khóa.

l = [[12587961, 0.7777777777777778], [12587970, 0.5172413793103449], [12587979, 0.3968253968253968], [12587982, 0.88], [12587984, 0.8484848484848485], [12587992, 0.7777777777777778], [12587995, 0.8070175438596491], [12588015, 0.4358974358974359], [12588023, 0.8985507246376812], [12588037, 0.5555555555555555], [12588042, 0.9473684210526315]] 
max_sub = max(l, key=lambda x: x[1]) 
max_val = max_sub[1] 
max_index = max_sub[0] 
-2

Simple

list = [[12587961, 0.7777777777777778], [12587970, 0.5172413793103449], [12587979, 0.3968253968253968], [12587982, 0.88], [12587984, 0.8484848484848485], [12587992, 0.7777777777777778], [12587995, 0.8070175438596491], [12588015, 0.4358974358974359], [12588023, 0.8985507246376812], [12588037, 0.5555555555555555], [12588042, 0.9473684210526315]] 
list2 = [] 

for x in list: 
    list2.append(x[1]) 
print "index->" + str(list[list2.index(max(list2))][0]) 
print "max value->" + str(list[list2.index(max(list2))][1]) 
0
allData = [[12587961, 0.7777777777777778], [12587970, 0.5172413793103449], [12587979, 0.3968253968253968], [12587982, 0.88], [12587984, 0.8484848484848485], [12587992, 0.7777777777777778], [12587995, 0.8070175438596491], [12588015, 0.4358974358974359], [12588023, 0.8985507246376812], [12588037, 0.5555555555555555], [12588042, 0.9473684210526315]] 

listOfSecondData = [i[1] for i in allData] 
result = allData[listOfSecondData.index(max(listOfSecondData))][0] 

print(result) 
#Output: 12588042 
Các vấn đề liên quan