2012-10-30 9 views
42

संभव डुप्लिकेट:अजगर में tuples की एक सूची से अधिकतम मान का पता लगाएं

:
Sorting or Finding Max Value by the second element in a nested list. Python

मैं ~ इस तरह उस में 10^6 tuples के साथ एक सूची है

[(101, 153), (255, 827), (361, 961), ...] 
^ ^
    X  Y 

मैं इस सूची में वाईएस का अधिकतम मूल्य खोजना चाहता हूं, लेकिन यह भी जानना चाहता हूं कि यह एक्स है।

मैं यह कैसे कर सकता हूं?

उत्तर

92

उपयोग max():


itemgetter() का उपयोग करना:

In [53]: lis=[(101, 153), (255, 827), (361, 961)] 

In [81]: from operator import itemgetter 

In [82]: max(lis,key=itemgetter(1))[0] #faster solution 
Out[82]: 361 

lambda का उपयोग कर:

In [54]: max(lis,key=lambda item:item[1]) 
Out[54]: (361, 961) 

In [55]: max(lis,key=lambda item:item[1])[0] 
Out[55]: 361 

timeit तुलना:

In [30]: %timeit max(lis,key=itemgetter(1)) 
1000 loops, best of 3: 232 us per loop 

In [31]: %timeit max(lis,key=lambda item:item[1]) 
1000 loops, best of 3: 556 us per loop 
+4

(+1) 'operator.itemgetter (1) 'इस मामले में लैम्ब्डा से बेहतर काम करेगा क्योंकि लैम्ब्डा 10 ** 6 बार प्रत्येक के लिए बनाया जाएगा। – inspectorG4dget

+0

@ इंस्पेक्टर जी 4 डीजेट केवल पोस्ट करने वाला था। :) –

+0

@ अश्विनी चौधरी: यद्यपि ऐसे मामलों में 'operator.itemgetter' और 'lambda' के बीच काफी गति अंतर है? – inspectorG4dget

0

आप कर सकते थे सूची के माध्यम से पाश और एक चर में टपल रखने के लिए और उसके बाद आप एक ही चर से दोनों मान देख सकते हैं ...

num=(0, 0) 
for item in tuplelist: 
    if item[1]>num[1]: 
    num=item #num has the whole tuple with the highest y value and its x value 
+0

मुझे लगता है कि 'अधिकतम() 'बहुत आसान है। –

+0

@ बुरहान खालिद हाँ, लेकिन जब मैं अपनी पोस्ट लिख रहा था तब पोस्ट किया गया था। मैं इसके बारे में सोच नहीं रहा था। मैं इसे और कहने के लिए संपादित नहीं करूँगा, लेकिन मेरी पोस्ट को बस इतना ही रखें ताकि वंशावली के लिए ऐसा करने का एक वैकल्पिक तरीका हो। :) – CoffeeRain

4

अधिकतम करने के लिए इसके अलावा, आप भी प्रकार कर सकते हैं:

>>> lis 
[(101, 153), (255, 827), (361, 961)] 
>>> sorted(lis,key=lambda x: x[1], reverse=True)[0] 
(361, 961) 
+0

~ ओ (एन लॉग एन) सॉर्ट नहीं कर रहा है और अधिकतम ओ (एन) खोज रहा है? - सीधे अधिकतम खोजना बेहतर है –

संबंधित मुद्दे