উত্তর:
>>> m = max(a)
>>> [i for i, j in enumerate(a) if j == m]
[9, 12]
a.index(max(a))
আপনাকে তালিকার বৃহত্তম মূল্যবান উপাদানটির প্রথম উদাহরণের সূচকটি বলবে a
।
নির্বাচিত উত্তরের (এবং বেশিরভাগ অন্যান্য) তালিকার মধ্য দিয়ে কমপক্ষে দুটি পাসের প্রয়োজন।
এখানে একটি পাস সমাধান রয়েছে যা দীর্ঘ তালিকার জন্য আরও ভাল পছন্দ হতে পারে।
সম্পাদিত: @ জন মাচিন নির্দেশিত দুটি ঘাটতি পূরণ করার জন্য। (২) আমি পূর্বসূরিদের অনুমতিপ্রাপ্ত প্রতিটি শর্ত এবং অনুমানের সংঘটন হওয়ার অনুমানযুক্ত সম্ভাবনার উপর ভিত্তি করে পরীক্ষাগুলি অনুকূলকরণের চেষ্টা করেছি। এটি যথাযথ আরম্ভের মানগুলি খুঁজে বের করা max_val
এবং max_indices
এটি সম্ভাব্য সকল ক্ষেত্রে কার্যকর কাজ করার জন্য খুব জটিল ছিল , বিশেষত যদি তালিকার সর্বোচ্চ মানটি প্রথম মান হিসাবে ঘটেছিল - তবে আমি এখন বিশ্বাস করি যে এটি বিশ্বাস করে।
def maxelements(seq):
''' Return list of position(s) of largest element '''
max_indices = []
if seq:
max_val = seq[0]
for i,val in ((i,val) for i,val in enumerate(seq) if val >= max_val):
if val == max_val:
max_indices.append(i)
else:
max_val = val
max_indices = [i]
return max_indices
[]
বিজ্ঞাপন হিসাবে প্রত্যাবর্তন করা উচিত ("প্রত্যাবর্তন তালিকা")। কোড সহজভাবে হওয়া উচিত if not seq: return []
। (২) লুপে টেস্টিং স্কিমটি উপ-অনুকূল: এলোমেলো তালিকায় গড়ে শর্তটি val < maxval
সর্বাধিক সাধারণ হবে তবে উপরের কোডটি একটিটির পরিবর্তে ২ টি পরীক্ষা নেয়।
==
পরিবর্তে বিরল ক্ষেত্রে এখন 3 টি পরীক্ষা করে - আপনার elif
অবস্থা সর্বদা সত্য হবে।
elif
নিজেকে ধরে ফেলেছি, এফডাব্লুআইডাব্লু। ;-)
আমি নিম্নলিখিত নিয়ে এসেছেন এবং এটি কাজ করে আপনার সাথে দেখতে পারেন max
, min
এই মত তালিকা মাধ্যমে অন্যান্যদের এবং ফাংশন:
সুতরাং, দয়া করে পরবর্তী উদাহরণ তালিকায় বিবেচনা করুন তালিকার সর্বাধিকের অবস্থানটি সন্ধান করুন a
:
>>> a = [3,2,1, 4,5]
জেনারেটর ব্যবহার করে enumerate
এবং একটি ingালাই তৈরি করা
>>> list(enumerate(a))
[(0, 3), (1, 2), (2, 1), (3, 4), (4, 5)]
এই মুহুর্তে, আমরা সর্বোচ্চের সাথে অবস্থানটি বের করতে পারি
>>> max(enumerate(a), key=(lambda x: x[1]))
(4, 5)
উপরেরটি আমাদের জানায়, সর্বাধিকটি পজিশনে রয়েছে 4 এবং তার মান 5।
আপনি যেমন key
আর্গুমেন্টে দেখেন যে কোনও ল্যাম্বডা উপযুক্ত হিসাবে সংজ্ঞা দিয়ে আপনি কোনও পুনরাবৃত্ত বস্তুর উপরে সর্বাধিক সন্ধান করতে পারেন।
আমি আশা করি এটির অবদান রয়েছে।
পিডি: যেমন @ পলঅয়েস্টার একটি মন্তব্যে উল্লেখ করেছেন। যুক্তিটি খালি তালিকার সাথে যুক্ত Python 3.x
হওয়ার সাথে সাথে min
এবং max
এমন একটি নতুন কীওয়ার্ডের অনুমতি দিন default
যা উত্স ব্যতিক্রম ValueError
এড়ায়।max(enumerate(list), key=(lambda x:x[1]), default = -1)
@ মার্টিনাউ দ্বারা উদ্ধৃত @ সাইলেন্টঘস্ট-বীট পারফরম্যান্সটি আমি পুনরুত্পাদন করতে পারব না। তুলনার সাথে এখানে আমার প্রচেষ্টা:
=== maxeament.py ===
a = [32, 37, 28, 30, 37, 25, 27, 24, 35, 55, 23, 31, 55, 21, 40, 18, 50,
35, 41, 49, 37, 19, 40, 41, 31]
b = range(10000)
c = range(10000 - 1, -1, -1)
d = b + c
def maxelements_s(seq): # @SilentGhost
''' Return list of position(s) of largest element '''
m = max(seq)
return [i for i, j in enumerate(seq) if j == m]
def maxelements_m(seq): # @martineau
''' Return list of position(s) of largest element '''
max_indices = []
if len(seq):
max_val = seq[0]
for i, val in ((i, val) for i, val in enumerate(seq) if val >= max_val):
if val == max_val:
max_indices.append(i)
else:
max_val = val
max_indices = [i]
return max_indices
def maxelements_j(seq): # @John Machin
''' Return list of position(s) of largest element '''
if not seq: return []
max_val = seq[0] if seq[0] >= seq[-1] else seq[-1]
max_indices = []
for i, val in enumerate(seq):
if val < max_val: continue
if val == max_val:
max_indices.append(i)
else:
max_val = val
max_indices = [i]
return max_indices
উইন্ডোজ এক্সপি এসপি 3 তে পাইথন ২.7 চালাচ্ছে এমন একটি পুরানো ল্যাপটপ থেকে প্রাপ্ত ফলাফল:
>\python27\python -mtimeit -s"import maxelements as me" "me.maxelements_s(me.a)"
100000 loops, best of 3: 6.88 usec per loop
>\python27\python -mtimeit -s"import maxelements as me" "me.maxelements_m(me.a)"
100000 loops, best of 3: 11.1 usec per loop
>\python27\python -mtimeit -s"import maxelements as me" "me.maxelements_j(me.a)"
100000 loops, best of 3: 8.51 usec per loop
>\python27\python -mtimeit -s"import maxelements as me;a100=me.a*100" "me.maxelements_s(a100)"
1000 loops, best of 3: 535 usec per loop
>\python27\python -mtimeit -s"import maxelements as me;a100=me.a*100" "me.maxelements_m(a100)"
1000 loops, best of 3: 558 usec per loop
>\python27\python -mtimeit -s"import maxelements as me;a100=me.a*100" "me.maxelements_j(a100)"
1000 loops, best of 3: 489 usec per loop
a = [32, 37, 28, 30, 37, 25, 27, 24, 35,
55, 23, 31, 55, 21, 40, 18, 50,
35, 41, 49, 37, 19, 40, 41, 31]
import pandas as pd
pd.Series(a).idxmax()
9
আমি সাধারণত এটি করি।
আপনি নমপি প্যাকেজটিও ব্যবহার করতে পারেন:
import numpy as np
A = np.array(a)
maximum_indices = np.where(A==max(a))
এটি সর্বাধিক মান ধারণ করে এমন সমস্ত সূচকের একটি অদ্ভুত অ্যারে প্রদান করবে
আপনি যদি এটি একটি তালিকায় পরিণত করতে চান:
maximum_indices_list = maximum_indices.tolist()
@ শ্যাশ এর উত্তর অন্যত্র দিয়েছেন
সর্বাধিক তালিকা উপাদানের সূচকটি খুঁজে পাওয়ার পাইথোনিক উপায় way
position = max(enumerate(a), key=lambda x: x[1])[0]
যা এক পাস করে । তবুও, এটি @ সাইলেন্ট_গোস্টের সমাধানের চেয়ে ধীর এবং আরও বেশি, @ এনমিক্যালস:
for i in s m j n; do echo $i; python -mtimeit -s"import maxelements as me" "me.maxelements_${i}(me.a)"; done
s
100000 loops, best of 3: 3.13 usec per loop
m
100000 loops, best of 3: 4.99 usec per loop
j
100000 loops, best of 3: 3.71 usec per loop
n
1000000 loops, best of 3: 1.31 usec per loop
এখানে সর্বাধিক মান এবং সূচিগুলি এখানে প্রদর্শিত হয়:
>>> from collections import defaultdict
>>> d = defaultdict(list)
>>> a = [32, 37, 28, 30, 37, 25, 27, 24, 35, 55, 23, 31, 55, 21, 40, 18, 50, 35, 41, 49, 37, 19, 40, 41, 31]
>>> for i, x in enumerate(a):
... d[x].append(i)
...
>>> k = max(d.keys())
>>> print k, d[k]
55 [9, 12]
পরে: @ সাইলেন্টগোস্টের সন্তুষ্টির জন্য
>>> from itertools import takewhile
>>> import heapq
>>>
>>> def popper(heap):
... while heap:
... yield heapq.heappop(heap)
...
>>> a = [32, 37, 28, 30, 37, 25, 27, 24, 35, 55, 23, 31, 55, 21, 40, 18, 50, 35, 41, 49, 37, 19, 40, 41, 31]
>>> h = [(-x, i) for i, x in enumerate(a)]
>>> heapq.heapify(h)
>>>
>>> largest = heapq.heappop(h)
>>> indexes = [largest[1]] + [x[1] for x in takewhile(lambda large: large[0] == largest[0], popper(h))]
>>> print -largest[0], indexes
55 [9, 12]
heapq
- সেখানে সর্বাধিক সন্ধান করা তুচ্ছ হবে।
heapq
সমাধানটি দেখতে পছন্দ করি তখন আমার সন্দেহ হয় এটি কার্যকর হবে।
একটি তালিকা বোঝার সঙ্গে কিন্তু গণনা ছাড়াই অনুরূপ ধারণা
m = max(a)
[i for i in range(len(a)) if a[i] == m]
a[i]
কলটির কারণে এটি গণনার সাথে সমাধানের চেয়ে অবশ্যই ধীর ।
কেবল একটি লাইন:
idx = max(range(len(a)), key = lambda i: a[i])
যদি আপনি n
ডাকা একটি তালিকায় বৃহত্তম সংখ্যার সূচক পেতে চান তবে আপনি data
পান্ডাস ব্যবহার করতে পারেন sort_values
:
pd.Series(data).sort_values(ascending=False).index[0:n]
import operator
def max_positions(iterable, key=None, reverse=False):
if key is None:
def key(x):
return x
if reverse:
better = operator.lt
else:
better = operator.gt
it = enumerate(iterable)
for pos, item in it:
break
else:
raise ValueError("max_positions: empty iterable")
# note this is the same exception type raised by max([])
cur_max = key(item)
cur_pos = [pos]
for pos, item in it:
k = key(item)
if better(k, cur_max):
cur_max = k
cur_pos = [pos]
elif k == cur_max:
cur_pos.append(pos)
return cur_max, cur_pos
def min_positions(iterable, key=None, reverse=False):
return max_positions(iterable, key, not reverse)
>>> L = range(10) * 2
>>> L
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> max_positions(L)
(9, [9, 19])
>>> min_positions(L)
(0, [0, 10])
>>> max_positions(L, key=lambda x: x // 2, reverse=True)
(0, [0, 1, 10, 11])
এই কোডটি আগের পোস্ট করা উত্তরগুলির মতো পরিশীলিত নয় তবে এটি কাজ করবে:
m = max(a)
n = 0 # frequency of max (a)
for number in a :
if number == m :
n = n + 1
ilist = [None] * n # a list containing index values of maximum number in list a.
ilistindex = 0
aindex = 0 # required index value.
for number in a :
if number == m :
ilist[ilistindex] = aindex
ilistindex = ilistindex + 1
aindex = aindex + 1
print ilist
উপরের কোডে আইলিস্ট তালিকায় সর্বাধিক সংখ্যার সব পদ থাকবে।
আপনি এটি বিভিন্ন উপায়ে করতে পারেন।
পুরানো প্রচলিত উপায় হ'ল,
maxIndexList = list() #this list will store indices of maximum values
maximumValue = max(a) #get maximum value of the list
length = len(a) #calculate length of the array
for i in range(length): #loop through 0 to length-1 (because, 0 based indexing)
if a[i]==maximumValue: #if any value of list a is equal to maximum value then store its index to maxIndexList
maxIndexList.append(i)
print(maxIndexList) #finally print the list
তালিকার দৈর্ঘ্য গণনা করা এবং কোনও ভেরিয়েবলের সর্বাধিক মান সংরক্ষণ না করে অন্য উপায়,
maxIndexList = list()
index = 0 #variable to store index
for i in a: #iterate through the list (actually iterating through the value of list, not index )
if i==max(a): #max(a) returns a maximum value of list.
maxIndexList.append(index) #store the index of maximum value
index = index+1 #increment the index
print(maxIndexList)
আমরা পাইথোনিক এবং স্মার্ট উপায়ে এটি করতে পারি! কেবলমাত্র এক লাইনে তালিকা বোধগম্যতা ব্যবহার করে,
maxIndexList = [i for i,j in enumerate(a) if j==max(a)] #here,i=index and j = value of that index
আমার সমস্ত কোড পাইথন 3 এ রয়েছে।