python किसी आइटम की अनुक्रमणिका को पाइथन में एक सूची दी गई है





14 Answers

एक चीज जो पाइथन सीखने में वास्तव में सहायक है, इंटरैक्टिव हेल्प फ़ंक्शन का उपयोग करना है:

>>> help(["foo", "bar", "baz"])
Help on list object:

class list(object)
 ...

 |
 |  index(...)
 |      L.index(value, [start, [stop]]) -> integer -- return first index of value
 |

जो आपको उस विधि के लिए ले जाएगा जो आप खोज रहे हैं।

python list

एक सूची ["foo", "bar", "baz"] और सूची "bar" में एक आइटम के लिए, मैं पाइथन में अपनी अनुक्रमणिका (1) कैसे प्राप्त करूं?




सभी इंडेक्स प्राप्त करने के लिए:

 indexes = [i for i,x in enumerate(xs) if x == 'foo']



यदि तत्व सूची में नहीं है तो एक समस्या उत्पन्न होगी। यह फ़ंक्शन समस्या को संभालता है:

# if element is found it returns index of element else returns None

def find_element_in_list(element, list_element):
    try:
        index_element = list_element.index(element)
        return index_element
    except ValueError:
        return None



आपको यह जांचने के लिए एक शर्त निर्धारित करनी है कि आप जिस तत्व को खोज रहे हैं वह सूची में है या नहीं

if 'your_element' in mylist:
    print mylist.index('your_element')
else:
    print None



यदि आप सभी इंडेक्स चाहते हैं, तो आप NumPy उपयोग कर सकते हैं:

import numpy as np

array = [1, 2, 1, 3, 4, 5, 1]
item = 1
np_array = np.array(array)
item_index = np.where(np_array==item)
print item_index
# Out: (array([0, 2, 6], dtype=int64),)

यह स्पष्ट, पठनीय समाधान है।




zip समारोह के साथ सभी इंडेक्स:

get_indexes = lambda x, xs: [i for (y, i) in zip(xs, range(len(xs))) if x == y]

print get_indexes(2, [1, 2, 3, 4, 5, 6, 3, 2, 3, 2])
print get_indexes('f', 'xsfhhttytffsafweef')



एक अन्य विकल्प

>>> a = ['red', 'blue', 'green', 'red']
>>> b = 'red'
>>> offset = 0;
>>> indices = list()
>>> for i in range(a.count(b)):
...     indices.append(a.index(b,offset))
...     offset = indices[-1]+1
... 
>>> indices
[0, 3]
>>> 



और अब पूरी तरह से अलग कुछ करने के लिए...

... इंडेक्स प्राप्त करने से पहले आइटम के अस्तित्व की पुष्टि करना। इस दृष्टिकोण के बारे में अच्छी बात यह है कि फ़ंक्शन हमेशा सूचकांक की एक सूची देता है - भले ही यह एक खाली सूची हो। यह तारों के साथ भी काम करता है।

def indices(l, val):
    """Always returns a list containing the indices of val in the_list"""
    retval = []
    last = 0
    while val in l[last:]:
            i = l[last:].index(val)
            retval.append(last + i)
            last += i + 1   
    return retval

l = ['bar','foo','bar','baz','bar','bar']
q = 'bar'
print indices(l,q)
print indices(l,'bat')
print indices('abcdaababb','a')

जब एक इंटरैक्टिव पायथन विंडो में चिपकाया जाता है:

Python 2.7.6 (v2.7.6:3a1db0d2747e, Nov 10 2013, 00:42:54) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> def indices(the_list, val):
...     """Always returns a list containing the indices of val in the_list"""
...     retval = []
...     last = 0
...     while val in the_list[last:]:
...             i = the_list[last:].index(val)
...             retval.append(last + i)
...             last += i + 1   
...     return retval
... 
>>> l = ['bar','foo','bar','baz','bar','bar']
>>> q = 'bar'
>>> print indices(l,q)
[0, 2, 4, 5]
>>> print indices(l,'bat')
[]
>>> print indices('abcdaababb','a')
[0, 4, 5, 7]
>>> 

अद्यतन करें

हेड-डाउन पायथन विकास के एक और वर्ष के बाद, मैं अपने मूल उत्तर से थोड़ा शर्मिंदा हूं, इसलिए रिकॉर्ड सीधे सेट करने के लिए, कोई निश्चित रूप से उपर्युक्त कोड का उपयोग कर सकता है; हालांकि, समान व्यवहार प्राप्त करने के लिए अधिक मूर्खतापूर्ण तरीका गणना () फ़ंक्शन के साथ सूची समझ का उपयोग करना होगा।

कुछ इस तरह:

def indices(l, val):
    """Always returns a list containing the indices of val in the_list"""
    return [index for index, value in enumerate(l) if value == val]

l = ['bar','foo','bar','baz','bar','bar']
q = 'bar'
print indices(l,q)
print indices(l,'bat')
print indices('abcdaababb','a')

जो, जब एक इंटरैक्टिव पायथन खिड़की में चिपकाया जाता है:

Python 2.7.14 |Anaconda, Inc.| (default, Dec  7 2017, 11:07:58) 
[GCC 4.2.1 Compatible Clang 4.0.1 (tags/RELEASE_401/final)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> def indices(l, val):
...     """Always returns a list containing the indices of val in the_list"""
...     return [index for index, value in enumerate(l) if value == val]
... 
>>> l = ['bar','foo','bar','baz','bar','bar']
>>> q = 'bar'
>>> print indices(l,q)
[0, 2, 4, 5]
>>> print indices(l,'bat')
[]
>>> print indices('abcdaababb','a')
[0, 4, 5, 7]
>>> 

और अब, इस प्रश्न और सभी उत्तरों की समीक्षा करने के बाद, मुझे एहसास हुआ कि ने अपने पहले के जवाब में सुझाव दिया था । उस समय मैंने मूल रूप से इस सवाल का जवाब दिया, मैंने उस जवाब को भी नहीं देखा , क्योंकि मुझे यह समझ में नहीं आया। मुझे आशा है कि मेरा कुछ और वर्बोज़ उदाहरण समझने में सहायता करेगा।

यदि ऊपर दिए गए कोड की एक पंक्ति अभी भी आपको समझ में नहीं आती है, तो मैं आपको Google की पायथन सूची समझ की अत्यधिक अनुशंसा करता हूं और स्वयं को परिचित करने में कुछ मिनट लेता हूं। यह केवल कई शक्तिशाली विशेषताओं में से एक है जो कोड विकसित करने के लिए पाइथन का उपयोग करने में खुशी महसूस करते हैं।




यह समाधान दूसरों के जितना शक्तिशाली नहीं है, लेकिन यदि आप एक नौसिखिया हैं और केवल लूप के बारे में जानते हैं तो ValueError से बचते समय किसी आइटम की पहली अनुक्रमणिका ढूंढना अभी भी संभव है:

def find_element(p,t):
    i = 0
    for e in p:
        if e == t:
            return i
        else:
            i +=1
    return -1



चूंकि पायथन सूची शून्य-आधारित हैं, इसलिए हम ज़िप अंतर्निहित फ़ंक्शन का उपयोग निम्नानुसार कर सकते हैं:

>>> [i for i,j in zip(range(len(haystack)), haystack) if j == 'needle' ]

जहां "हैस्टैक" प्रश्न में सूची है और "सुई" आइटम देखने के लिए है।

(नोट: यहां हम इंडेक्स प्राप्त करने के लिए उपयोग कर रहे हैं, लेकिन अगर हमें वस्तुओं पर ध्यान केंद्रित करने की आवश्यकता है तो हम जे पर स्विच कर सकते हैं।)




पाइथन index() विधि एक त्रुटि फेंकता है अगर आइटम नहीं मिला, जो बेकार है!

तो इसके बजाय आप इसे जावास्क्रिप्ट के indexOf() फ़ंक्शन के समान बना सकते हैं जो आइटम वापस नहीं मिलने पर -1 देता है:

    try:
        index = array.index('search_keyword')
    except ValueError:
        index = -1



दो संभावनाएं हैं यदि सूची में दोहराए गए आइटम नहीं हैं जिन्हें आपको इंडेक्स की जांच करने की आवश्यकता है

 eg: li=[10,20,30] # here need to get index of 20 means
     li.index(20) # will work properly because 20 is not repeated

यदि इसका दोहराया गया मतलब है तो यह आपको केवल पहली अनुक्रमणिका देगा

यदि आपको सभी इंडेक्स प्राप्त करने की आवश्यकता है जहां आइटम मौजूद है

eg: li=[10,20,30,20,40, 50, 10] # here need to get index of 20 means its have 2 index (1,3) 

यह पाने के लिए कि आपको ऐसा करने की ज़रूरत है

 li=[10,20,30,20,40, 50, 10]
 [i for i, e in enumerate(li) if e == 20]

तो आपको इंडेक्स की सूची ओ / पी की तरह मिल जाएगी [1,3]




यदि प्रदर्शन चिंता का विषय है:

यह कई उत्तरों में उल्लिखित है कि list.index(item) विधि की list.index(item) विधि एक ओ (एन) एल्गोरिदम है। यह ठीक है अगर आपको इसे एक बार करने की ज़रूरत है। लेकिन अगर आपको कई बार तत्वों के सूचकांक तक पहुंचने की ज़रूरत है, तो पहले आइटम-इंडेक्स जोड़े के एक शब्दकोश (ओ (एन)) को बनाने के लिए और अधिक समझदारी होती है, और फिर जब भी आपको आवश्यकता हो तो ओ (1) पर इंडेक्स तक पहुंचें यह।

यदि आप सुनिश्चित हैं कि आपकी सूची में आइटम कभी दोहराए नहीं जाते हैं, तो आप आसानी से कर सकते हैं:

myList = ["foo", "bar", "baz"]

# Create the dictionary
myDict = dict((e,i) for i,e in enumerate(myList))

# Lookup
myDict["bar"] # Returns 1
# myDict.get("blah") if you don't want an error to be raised if element not found.

यदि आपके पास डुप्लिकेट तत्व हो सकते हैं, और उनके सभी सूचकांक वापस करने की आवश्यकता है:

from collections import defaultdict as dd
myList = ["foo", "bar", "bar", "baz", "foo"]

# Create the dictionary
myDict = dd(list)
for i,e in enumerate(myList):
    myDict[e].append(i)

# Lookup
myDict["foo"] # Returns [0, 4]



चलो नाम सूची में आपके पास नाम दें। कोई सूची सूची को एक numpy array परिवर्तित कर सकते हैं। और, सूची में चुने गए आइटम की अनुक्रमणिका प्राप्त करने के लिए numpy.where का उपयोग करें। निम्नलिखित तरीका है जिसमें आप इसे लागू करेंगे।

 import numpy as np lst = ["foo", "bar", "baz"] #lst: : 'list' data type lst_np = np.array(lst) #lst_np: 'numpy.ndarray' index = np.where( lst_np == 'bar')[0][0] #index: 'numpy.int64' data type print index 1 



Related


Tags

python   list