Python'da bir liste i├žeren bir ├Â─čenin dizinini bulma


Al─▒nan cevaba git


Bir liste ["foo", "bar", "baz"] ve listedeki bir ├Â─če "bar" i├žin indeksini (1) Python'da nas─▒l alabilirim?


2844









Cevap say─▒s─▒n─▒ say: 28






 >>> ["foo", "bar", "baz"].index("bar")
1
 

Referans: Veri Yap─▒lar─▒> Listelerde Daha Fazla Bilgi

Uyar─▒lar takip

Not Bu belki soruyu cevaplamak i├žin en temiz yolu ise o istedi olarak , index bir olduk├ža zay─▒f bir bile┼čendir list API ve ben ├Âfke kullanm─▒┼č son kez hat─▒rlayam─▒yorum. Yorumlarda, bu cevab─▒n ├žok referansl─▒ olmas─▒ nedeniyle daha eksiksiz yap─▒lmas─▒ gerekti─či belirtildi. Baz─▒ uyar─▒lar list.index takip eder. Muhtemelen ba┼člang─▒├žta bunun i├žin docstring bir g├Âz atmaya de─čer:

 >>> print(list.index.__doc__)
L.index(value, [start, [stop]]) -> integer -- return first index of value.
Raises ValueError if the value is not present.
 

Liste uzunlu─čunda do─črusal zaman karma┼č─▒kl─▒─č─▒

Bir index ├ža─čr─▒, bir e┼čle┼čme bulana kadar listedeki her eleman─▒ s─▒rayla kontrol eder. Listeniz uzunsa ve listede nerede ger├žekle┼čti─čini kabaca bilmiyorsan─▒z, bu arama bir darbo─čaz olabilir. Bu durumda, farkl─▒ bir veri yap─▒s─▒ d├╝┼č├╝nmelisiniz. Kibriti nerede bulaca─č─▒n─▒z─▒ biliyorsan─▒z, index bir ipucu verebilece─činizi unutmay─▒n . ├ľrne─čin, bu snippet'te, l.index(999_999, 999_990, 1_000_000) kabaca be┼č d├╝zl├╝k daha h─▒zl─▒d─▒r l.index(999_999) , ├ž├╝nk├╝ bir tanesinin yaln─▒zca 10 giri┼či aramas─▒ gerekirken, ikincisi bir milyonu arar:

 >>> import timeit
>>> timeit.timeit('l.index(999_999)', setup='l = list(range(0, 1_000_000))', number=1000)
9.356267921015387
>>> timeit.timeit('l.index(999_999, 999_990, 1_000_000)', setup='l = list(range(0, 1_000_000))', number=1000)
0.0004404920036904514
 

Yaln─▒zca ilk e┼čle┼čmenin dizinini arg├╝man─▒na d├Ând├╝r├╝r

Bir index e┼čle┼čme bulana kadar listede arama yapar ve orada durur. Daha fazla e┼čle┼čme endeksine ihtiya├ž duymay─▒ d├╝┼č├╝n├╝yorsan─▒z, bir liste anlama ya da ├╝retici ifadesi kullanmal─▒s─▒n─▒z.

 >>> [1, 1].index(1)
0
>>> [i for i, e in enumerate([1, 2, 1]) if e == 1]
[0, 2]
>>> g = (i for i, e in enumerate([1, 2, 1]) if e == 1)
>>> next(g)
0
>>> next(g)
2
 

Bir zamanlar kulland─▒─č─▒m ├žo─ču yerde index , art─▒k daha genelle┼čtirilebildiklerinden dolay─▒ art─▒k bir liste anlama ya da ├╝retici ifadesi kullan─▒yorum. Bu y├╝zden, e─čer ula┼čmay─▒ d├╝┼č├╝n├╝yorsan─▒z index , bu m├╝kemmel piton ├Âzelliklerine bir g├Âz at─▒n.

├ľ─če listede yoksa

├ľ─če mevcut de─čilse, yap─▒lan bir arama ile index sonu├žlan─▒r ValueError .

 >>> [1, 1].index(2)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: 2 is not in list
 

├ľ─če listede bulunmuyorsa,

  1. ├ľncelikle kontrol edin item in my_list (temiz, okunabilir yakla┼č─▒m) veya
  2. index Aramay─▒, try/except yakalayan bir blo─ča sar─▒n ValueError (en az─▒ndan aranacak liste uzun oldu─čunda ve ├Â─če genellikle bulundu─čunda, muhtemelen daha h─▒zl─▒d─▒r).

4057







Python'u ├Â─črenmede ger├žekten yararl─▒ olan bir ┼čey etkile┼čimli yard─▒m i┼člevini kullanmakt─▒r:

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

class list(object)
 ...

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

bu da sizi arad─▒─č─▒n─▒z y├Ânteme g├Ât├╝recektir.


861







Cevaplar─▒n ├žo─čunlu─ču, tek bir endeksin nas─▒l bulunaca─č─▒n─▒ a├ž─▒klar , ancak madde listede birden fazla kez bulunuyorsa, y├Ântemleri ├žoklu indeksler d├Ând├╝rmez. Kullan─▒m enumerate() :

 for i, j in enumerate(['foo', 'bar', 'baz']):
    if j == 'bar':
        print(i)
 

index() ─░se fonksiyon sadece, ilk ge├žti─či geri enumerate() t├╝m olu┼čumlar─▒ d├Ând├╝r├╝r.

Liste olarak anlama:

 [i for i, j in enumerate(['foo', 'bar', 'baz']) if j == 'bar']
 

Ayr─▒ca, itertools.count() (hemen hemen s─▒ralad─▒─č─▒m─▒zla hemen hemen ayn─▒ yakla┼č─▒mla) olan k├╝├ž├╝k bir ├ž├Âz├╝m daha var:

 from itertools import izip as zip, count # izip for maximum efficiency
[i for i, j in zip(count(), ['foo', 'bar', 'baz']) if j == 'bar']
 

Bu, daha b├╝y├╝k listeler i├žin kullanmaktan daha verimlidir enumerate() :

 $ python -m timeit -s "from itertools import izip as zip, count" "[i for i, j in zip(count(), ['foo', 'bar', 'baz']*500) if j == 'bar']"
10000 loops, best of 3: 174 usec per loop
$ python -m timeit "[i for i, j in enumerate(['foo', 'bar', 'baz']*500) if j == 'bar']"
10000 loops, best of 3: 196 usec per loop
 

511







T├╝m dizinleri almak i├žin:

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

155


2013-06-25





index() ilk de─čer endeksini d├Ând├╝r├╝r !

| dizin (...)
| L.index (de─čer, [ba┼člang─▒├ž, [durdur]]) -> tamsay─▒ - de─čerin ilk dizinini d├Ând├╝r├╝r

 def all_indices(value, qlist):
    indices = []
    idx = -1
    while True:
        try:
            idx = qlist.index(value, idx+1)
            indices.append(idx)
        except ValueError:
            break
    return indices

all_indices("foo", ["foo","bar","baz","foo"])
 

128







├ľ─če listede de─čilse bir sorun ortaya ├ž─▒kar. Bu i┼člev sorunu ele al─▒r:

 # 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
 

77







 a = ["foo","bar","baz",'bar','any','much']

indexes = [index for index in range(len(a)) if a[index] == 'bar']
 

73







Arad─▒─č─▒n─▒z ├Â─čenin listede olup olmad─▒─č─▒n─▒ kontrol etmek i├žin bir ko┼čul belirlemelisiniz

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

53







Burada ├Ânerilen i┼člevlerin t├╝m├╝, do─čal dil davran─▒┼č─▒n─▒ ├žo─čalt─▒r ancak neler olup bitti─čini gizler.

 [i for i in range(len(mylist)) if mylist[i]==myterm]  # get the indices

[each for each in mylist if each==myterm]             # get the items

mylist.index(myterm) if myterm in mylist else None    # get the first index and fail quietly
 

Dil, istedi─činizi yapmak i├žin y├Ântemler sa─čl─▒yorsa neden istisna i┼člemeli bir i┼člev yazmal─▒s─▒n─▒z?


41







T├╝m dizinleri istiyorsan─▒z, o zaman NumPy kullanabilirsiniz :

 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),)
 

Net, okunabilir bir ├ž├Âz├╝m.


36







Python'da bir liste i├žeren bir ├Â─čenin dizinini bulma

Bir liste ["foo", "bar", "baz"] ve listedeki bir ├Â─če "bar" i├žin, dizinini (1) Python'da alman─▒n en temiz yolu nedir?

Elbette, ilk olay─▒n indeksini d├Ând├╝ren index metodu var:

 >>> l = ["foo", "bar", "baz"]
>>> l.index('bar')
1
 

Bu y├Ântemle ilgili birka├ž sorun var:

  • de─čer listede de─čilse, bir ValueError
  • de─čerin birden fazla listede bulunuyorsa, yaln─▒zca birincinin dizinini al─▒rs─▒n─▒z

De─čer yok

De─čer eksik olabilirse, onu yakalaman─▒z gerekir ValueError .

Bunu, b├Âyle bir yeniden kullan─▒labilir tan─▒mla yapabilirsiniz:

 def index(a_list, value):
    try:
        return a_list.index(value)
    except ValueError:
        return None
 

Ve bu ┼čekilde kullan─▒n:

 >>> print(index(l, 'quux'))
None
>>> print(index(l, 'bar'))
1
 

Bunun dezavantaj─▒, muhtemelen, d├Ând├╝r├╝len de─čerin is veya is not Yoktur olup olmad─▒─č─▒n─▒ kontrol etmenizdir.

 result = index(a_list, value)
if result is not None:
    do_something(result)
 

Listede birden fazla de─čer

Daha fazla olu┼čum ya┼čayabilseydiniz, a┼ča─č─▒dakilerle tam bilgi sahibi olmazs─▒n─▒z list.index :

 >>> l.append('bar')
>>> l
['foo', 'bar', 'baz', 'bar']
>>> l.index('bar')              # nothing at index 3?
1
 

Dizinleri anlayan bir listeye numaraland─▒rabilirsiniz:

 >>> [index for index, v in enumerate(l) if v == 'bar']
[1, 3]
>>> [index for index, v in enumerate(l) if v == 'boink']
[]
 

E─čer hi├ž bir durumunuz yoksa, sonucun boolean kontrol├╝ ile bunu kontrol edebilir ya da sonu├žlar─▒ dola┼čt─▒r─▒rsan─▒z hi├žbir ┼čey yapamazs─▒n─▒z:

 indexes = [index for index, v in enumerate(l) if v == 'boink']
for index in indexes:
    do_something(index)
 

Pandalarla yap─▒lan daha iyi veriler

Pandalar─▒n─▒z varsa, bu bilgiyi bir Series nesnesiyle kolayca alabilirsiniz:

 >>> import pandas as pd
>>> series = pd.Series(l)
>>> series
0    foo
1    bar
2    baz
3    bar
dtype: object
 

Bir kar┼č─▒la┼čt─▒rma kontrol├╝ bir dizi boole d├Ând├╝r├╝r:

 >>> series == 'bar'
0    False
1     True
2    False
3     True
dtype: bool
 

Bu boolean serisini, abonelik notasyonu ile seriye iletin, sadece e┼čle┼čen ├╝yelere sahip olacaks─▒n─▒z:

 >>> series[series == 'bar']
1    bar
3    bar
dtype: object
 

Yaln─▒zca dizinleri istiyorsan─▒z, index ├Âzelli─či bir dizi tamsay─▒ d├Ând├╝r├╝r:

 >>> series[series == 'bar'].index
Int64Index([1, 3], dtype='int64')
 

Bunlar─▒ bir listede veya grupta g├Ârmek istiyorsan─▒z, bunlar─▒ yap─▒c─▒ya iletin:

 >>> list(series[series == 'bar'].index)
[1, 3]
 

Evet, enumerate ile bir liste kavrama da kullanabilirsiniz, ancak bence bu zarif de─čil, bence - Python'da e┼čitlik i├žin testler yap─▒yorsunuz, C'nin i├žine yerle┼čtirilmi┼č yerle┼čik kodun kullan─▒lmas─▒na izin vermek yerine:

 >>> [i for i, value in enumerate(l) if value == 'bar']
[1, 3]
 

Bu bir XY sorunu mu?

XY problemi, ger├žek probleminizden ziyade ├ž├Âz├╝m giri┼čimi hakk─▒nda sorular soruyor.

Listede bir ├Â─če verilen dizine neden ihtiyac─▒n─▒z oldu─čunu d├╝┼č├╝n├╝yorsunuz?

De─čeri zaten biliyorsan─▒z, listenin neresinde oldu─čunu neden umursuyorsunuz?

De─čer orada de─čilse, yakalamak ValueError olduk├ža ayr─▒nt─▒l─▒ - ve bundan ka├ž─▒nmay─▒ tercih ediyorum.

Genellikle zaten listeyi yineliyorum, bu y├╝zden endeksi numaraland─▒rmak i├žin genellikle ilgin├ž herhangi bir bilgiyi g├Âsterece─čim .

Verileri kar─▒┼čt─▒r─▒yorsan─▒z, muhtemelen g├Âsterdi─čim saf Python ge├žici ├ž├Âz├╝mlerinden ├žok daha ┼č─▒k ara├žlara sahip pandalar kullan─▒yor olmal─▒s─▒n─▒z.

Kendime ihtiyac─▒m oldu─čunu hat─▒rlam─▒yorum list.index . Ancak, Python standart k├╝t├╝phanesine bakt─▒m ve bunun i├žin baz─▒ m├╝kemmel kullan─▒mlar g├Âr├╝yorum.

idlelib GUI ve metin ayr─▒┼čt─▒rma i├žin bunun bir├žok kullan─▒m─▒ vard─▒r .

keyword Mod├╝l kullan─▒r bunu otomatik olarak metaprogramlama arac─▒l─▒─č─▒ anahtar kelime listesini yenilemek i├žin mod├╝lde a├ž─▒klama i┼čaretleri bulmak i├žin.

Lib / mailbox.py 'de s─▒ral─▒ bir haritalama gibi kullan─▒yor gibi g├Âr├╝n├╝yor:

 key_list[key_list.index(old)] = new
 

ve

 del key_list[key_list.index(key)]
 

Lib / http / cookiejar.py 'de, ├Ân├╝m├╝zdeki ay almak i├žin kullan─▒l─▒yor gibi g├Âr├╝n├╝yor:

 mon = MONTHS_LOWER.index(mon.lower())+1
 

Lib / tarfile.py ├Â─česinde bir dilim almak i├žin distutils'e benzer:

 members = members[:members.index(tarinfo)]
 

Lib / pickletools.py i├žinde:

 numtopop = before.index(markobject)
 

Bu kullan─▒mlar─▒n ortak g├Âz├╝kt├╝─č├╝ ┼čey, s─▒n─▒rl─▒ b├╝y├╝kl├╝k listelerinde (sanki O (n) arama s├╝resi nedeniyle ├Ânemlidir) listelerde i┼člem g├Ârd├╝─č├╝ list.index ve ├žo─čunlukla ayr─▒┼čt─▒rmada (ve Bo┼čta durumunda UI) kulland─▒klar─▒d─▒r.

Bunun i├žin kullan─▒m durumlar─▒ olsa da, olduk├ža nadirdir. Kendinizi bu cevab─▒ ararken buluyorsan─▒z, yapt─▒─č─▒n─▒z ┼čeyin kullan─▒m dili i├žin dilin sa─člad─▒─č─▒ ara├žlar─▒n en do─črudan kullan─▒m─▒ olup olmad─▒─č─▒n─▒ kendinize sorun.


28







─░┼člevli t├╝m dizinler 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')
 

21







Bir listedeki t├╝m olu┼čumlar─▒ ve bir veya daha fazla (ayn─▒) ├Â─čenin konumunu alma

Numaraland─▒r─▒lm─▒┼č (alist) ile, x eleman─▒ arad─▒─č─▒n─▒z ┼čeye e┼čit oldu─čunda listenin endeksi olan ilk eleman─▒ (n) saklayabilirsiniz.

 >>> alist = ['foo', 'spam', 'egg', 'foo']
>>> foo_indexes = [n for n,x in enumerate(alist) if x=='foo']
>>> foo_indexes
[0, 3]
>>>
 

─░┼člevimizi findindex yapal─▒m

Bu i┼člev, ├Â─čeyi ve listeyi arg├╝man olarak al─▒r ve daha ├Ânce g├Ârd├╝─č├╝m├╝z gibi listedeki ├Â─čenin konumunu d├Ând├╝r├╝r.

 def indexlist(item2find, list_or_string):
  "Returns all indexes of an item in a list or a string"
  return [n for n,item in enumerate(list_or_string) if item==item2find]

print(indexlist("1", "010101010"))
 

Çıktı


 [1, 3, 5, 7]
 

Basit

 for n, i in enumerate([1, 2, 3, 4, 1]):
    if i == 1:
        print(n)
 

Çıktı:

 0
4
 

20







Sadece gidebilirsin

 a = [['hand', 'head'], ['phone', 'wallet'], ['lost', 'stock']]
b = ['phone', 'lost']

res = [[x[0] for x in a].index(y) for y in b]
 

16







Ba┼čka se├ženek

 >>> 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]
>>> 
 

16







Ve ┼čimdi tamamen farkl─▒ bir ┼čey...

... indeksi almadan ├Ânce ├Â─čenin varl─▒─č─▒n─▒ onaylamak gibi. Bu yakla┼č─▒m─▒n en g├╝zel yan─▒, bo┼č bir liste olsa bile, i┼člev her zaman bir dizin listesi d├Ând├╝r├╝r. Dizelerle de ├žal─▒┼č─▒r.

 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')
 

Etkile┼čimli bir python penceresine yap─▒┼čt─▒r─▒ld─▒─č─▒nda:

 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]
>>> 
 

G├╝ncelle┼čtirme

Ba┼čka bir ba┼ča d├Ân python geli┼čiminden sonra, orijinal cevab─▒mdan biraz utan─▒yorum, bu nedenle rekoru d├╝zeltmek i├žin kesinlikle yukar─▒daki kodu kullanabilirsiniz; ancak, ayn─▒ davran─▒┼č─▒ elde etmenin ├žok daha aptalca yolu, enumerate () i┼čleviyle birlikte liste anlama ├Âzelli─čini kullanmak olacakt─▒r.

Bunun gibi bir ┼čey:

 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')
 

Hangi etkile┼čimli bir python penceresine yap─▒┼čt─▒r─▒ld─▒─č─▒nda:

 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]
>>> 
 

Ve ┼čimdi, bu soruyu ve t├╝m cevaplar─▒ inceledikten sonra, MYK'n─▒n ├Ânceki cevab─▒nda tam olarak ├Ânerdi─či ┼čeyin bu oldu─čunu anlad─▒m . Asl─▒nda bu soruyu cevaplad─▒─č─▒mda o cevab─▒ bile g├Ârmedim , ├ž├╝nk├╝ anlamad─▒m. Umar─▒m biraz daha ayr─▒nt─▒l─▒ ├Ârne─čimin anlamalar─▒na yard─▒mc─▒ olur.

Yine de yukar─▒daki kod tek sat─▒r halinde de─čil size mant─▒kl─▒, ben ├žok size Google'─▒n piton liste anlama 'tavsiye ve yak─▒ndan tan─▒mak i├žin birka├ž dakika s├╝rebilir. Python'u kod geli┼čtirmek i├žin kullanmay─▒ sevindiren g├╝├žl├╝ ├Âzelliklerden sadece bir tanesi.


15







FMc ve user7177'nin cevab─▒ndaki bir de─či┼čken, herhangi bir giri┼č i├žin t├╝m indeksleri geri getirebilecek bir dikme verecektir:

 >>> a = ['foo','bar','baz','bar','any', 'foo', 'much']
>>> l = dict(zip(set(a), map(lambda y: [i for i,z in enumerate(a) if z is y ], set(a))))
>>> l['foo']
[0, 5]
>>> l ['much']
[6]
>>> l
{'baz': [2], 'foo': [0, 5], 'bar': [1, 3], 'any': [4], 'much': [6]}
>>> 
 

Tek bir giri┼č i├žin t├╝m indeksleri almak i├žin bunu bir liner olarak da kullanabilirsiniz. Lambda'n─▒n ka├ž kez kullan─▒ld─▒─č─▒n─▒ azaltmak i├žin set (a) kullanm─▒┼č olmama ra─čmen verimlilik garantisi yoktur.


12







Bu ├ž├Âz├╝m di─čerleri kadar g├╝├žl├╝ de─čildir, ancak yeni for ba┼čl─▒yorsan─▒z ve yaln─▒zca d├Âng├╝ler hakk─▒nda bilginiz varsa, ValueError'dan ka├ž─▒n─▒rken bir ├Â─čenin ilk dizinini bulmak yine de m├╝mk├╝nd├╝r:

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

10







L maddesindeki x maddesinin indeksini bulmak:

 idx = L.index(x) if (x in L) else -1
 

6







 name ="bar"
list = [["foo", 1], ["bar", 2], ["baz", 3]]
new_list=[]
for item in list:
    new_list.append(item[0])
print(new_list)
try:
    location= new_list.index(name)
except:
    location=-1
print (location)
 

Bu dize de listede de─čilse, listede de─čilse sonra konum = -1 i├žin hesaplar


5







Python listeleri s─▒f─▒r tabanl─▒ oldu─čundan, zip yerle┼čik i┼člevini a┼ča─č─▒daki gibi kullanabiliriz:

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

"samanl─▒k" s├Âz konusu liste ve "i─čne" ise aranacak ├Â─čedir.

(Not: Burada dizinleri almak i├žin i kullanarak yineliyoruz, ancak maddelere odaklanmak istiyorsak j'ye ge├žebiliriz.)


5







index() ├ľ─če bulunamad─▒ysa Python y├Ântemi bir hata atar. Bunun yerine , ├Â─če bulunmazsa indexOf() d├Ând├╝ren JavaScript i┼člevine benzer yapabilirsiniz -1 :

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

4







Buna daha i┼člevsel bir cevap var.

 list(filter(lambda x: x[1]=="bar",enumerate(["foo", "bar", "baz", "bar", "baz", "bar", "a", "b", "c"])))
 

Daha genel bir form:

 def get_index_of(lst, element):
    return list(map(lambda x: x[0],\
       (list(filter(lambda x: x[1]==element, enumerate(lst))))))
 

3







Sahip lst oldu─čun listeye ad─▒n─▒ verelim . Bir liste lst bir d├Ân├╝┼čt├╝rebilirsiniz numpy array . Ard─▒ndan , listedeki se├žilen ├Â─čenin dizinini almak i├žin numpy.where komutunu kullan─▒n. Bunu uygulayaca─č─▒n─▒z yol a┼ča─č─▒dad─▒r.

 import numpy as np

lst = ["foo", "bar", "baz"]  #lst: : 'list' data type
print np.where( np.array(lst) == 'bar')[0][0]

>>> 1
 

3







Benim gibi ba┼čka bir dilden gelenler i├žin, belki basit bir d├Âng├╝ ile onu anlamak ve kullanmak daha kolayd─▒r:

 mylist = ["foo", "bar", "baz", "bar"]
newlist = enumerate(mylist)
for index, item in newlist:
  if item == "bar":
    print(index, item)
 

Bunun i├žin minnettar─▒m, yani numaraland─▒rman─▒n tam olarak ne i┼či var? . Bu anlamama yard─▒mc─▒ oldu.


1







Performans ├Ânemli ise:

Yerle┼čik y├Ântem list.index(item) y├Ânteminin bir O (n) algoritmas─▒ oldu─ču say─▒s─▒z cevapta belirtilmi┼čtir . Bunu bir kez yapman─▒z gerekirse, sorun de─čil. Ancak, elementlerin indekslerine birka├ž defa eri┼čmeniz gerekiyorsa, ilk ├Ânce madde-indeks ├žiftlerinin s├Âzl├╝─č├╝n├╝ (O (n)) olu┼čturup ard─▒ndan indekse her ihtiyac─▒n─▒z oldu─čunda O (1) 'e eri┼čmek daha mant─▒kl─▒ olur. o.

Listenizdeki ├Â─čelerin asla tekrarlanmad─▒─č─▒ndan eminseniz, kolayca yapabilirsiniz:

 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.
 

Yinelenen ├Â─čeleriniz varsa ve t├╝m dizinlerini d├Ând├╝rmeniz gerekirse:

 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]
 

1







@TerryA taraf─▒ndan belirtildi─či gibi, bir├žok cevap bir dizinin nas─▒l bulunaca─č─▒n─▒ tart─▒┼čmaktad─▒r .

more_itertools yinelenebilir i├žinde birden fazla endeksin yerini belirleyen ara├žlar─▒ olan ├╝├ž├╝nc├╝ taraf bir k├╝t├╝phanedir .

verilmi┼č

 import more_itertools as mit


iterable = ["foo", "bar", "baz", "ham", "foo", "bar", "baz"]
 

kod

Birden fazla g├Âzlem endeksini bulun:

 list(mit.locate(iterable, lambda x: x == "bar"))
# [1, 5]
 

Birden fazla ├Â─čeyi test et:

 list(mit.locate(iterable, lambda x: x in {"bar", "ham"}))
# [1, 3, 5]
 

Daha fazla se├žene─če de bak─▒n─▒z more_itertools.locate . ─░le y├╝kleyin > pip install more_itertools .


1







S├Âzl├╝─č├╝ kullanarak, ├Ânce listeyi i┼čle ve sonra dizini ekle

 from collections import defaultdict

index_dict = defaultdict(list)    
word_list =  ['foo','bar','baz','bar','any', 'foo', 'much']

for word_index in range(len(word_list)) :
    index_dict[word_list[word_index]].append(word_index)

word_index_to_find = 'foo'       
print(index_dict[word_index_to_find])

# output :  [0, 5]
 

0



─░lgili yay─▒nlar


Std :: vector yineleyicisinin dizinini alman─▒n en etkili yolu nedir?

Bir vekt├Ârde bir elementin indeksini bulmak i├žin bir R fonksiyonu var m─▒?

Bir listedeki bir ├Â─čenin indeksini tek ad─▒mda nas─▒l al─▒r─▒m?

Bir dizi listesinin uzunlu─ču nas─▒l bulunur? [├žift]

Bir nesneler dizisinde, ├Âznitelikleri bir aramayla e┼čle┼čen bir nesnenin dizinini bulman─▒n en h─▒zl─▒ yolu

Listenin i├žindeki bir dizinin dizinini bulun, dizinin de─čerini e┼čle┼čtirin

Python listesi anlama kullanarak bir ko┼čulu temel alarak elementlerin indeksini bulma

Vekt├Ârdeki bir ├Â─čenin dizinini nas─▒l bulabilirim?

Bir int dizisindeki bir eleman─▒n dizinini nas─▒l bulabilirim?

Bir javascript dizisinde bir nesnenin indeksini anahtar ve de─čere g├Âre bulma

Etiketle ilgili di─čer sorular [python]


Nesnenin t├╝r├╝n├╝n ad─▒n─▒ al

SQL Server ile INNER JOIN kullanarak nas─▒l silinir?

Dosya Y├╝kleme ASP.NET MVC 3.0

Bu Faaliyetin zaten pencere dekoru taraf─▒ndan sa─članan bir eylem ├žubu─ču var

Xcode - Komut Sat─▒r─▒ Ara├žlar─▒n─▒ y├╝kle

Python'da del ne zaman faydal─▒d─▒r?

CORS - ├ľn kontrol taleplerinin sunulmas─▒n─▒n ard─▒ndaki motivasyon nedir?

T-SQL deyimlerinde N ├Âneki anlam─▒ nedir?

Fabrika y├Ântemi deseninin C++ 'da do─čru uygulanmas─▒

kurulum beti─či hatayla ├ž─▒kt─▒: komut 'x86_64-linux-gnu-gcc' ├ž─▒k─▒┼č durumu 1 ile ba┼čar─▒s─▒z oldu