'For' d├Âng├╝lerinde dizine eri┼čiliyor mu?


Al─▒nan cevaba git


for Dizine a┼ča─č─▒daki gibi bir d├Âng├╝de nas─▒l eri┼čirim?

 ints = [8, 23, 45, 12, 78]
for i in ints:
    print('item #{} = {}'.format(???, i))
 

Bu ├ž─▒kt─▒y─▒ almak istiyorum:

 item #1 = 8
item #2 = 23
item #3 = 45
item #4 = 12
item #5 = 78
 

Bir d├Âng├╝ kullanarak ├╝zerinden for d├Âng├╝, bu durumda, 1 ile 5 aras─▒nda d├Âng├╝ dizinine nas─▒l eri┼čebilirim?


3270









Cevap say─▒s─▒n─▒ say: 19






Dizin de─či┼čkeni (normal olarak C veya PHP gibi dillerde kullanaca─č─▒n─▒z) gibi ek bir durum de─či┼čkeni kullanmak, pitonik olmayan olarak kabul edilir.

Daha iyi se├ženek, enumerate() hem Python 2 hem de 3'te bulunan yerle┼čik i┼člevi kullanmakt─▒r :

 for idx, val in enumerate(ints):
    print(idx, val)
 

Check out PEP 279 daha fazlas─▒.


5585







Bir for d├Âng├╝s├╝ kullanarak bu durumda 1-5 aras─▒ d├Âng├╝ dizinine nas─▒l eri┼čebilirim?

enumerate Dizini yineleyince ├Â─čeyle birlikte almak i├žin kullan─▒n :

 for index, item in enumerate(items):
    print(index, item)
 

Ve Python'un indekslerinin s─▒f─▒rdan ba┼člad─▒─č─▒n─▒ unutmay─▒n, b├Âylece yukar─▒dakilerle 0 ila 4 elde edersiniz. 1'den 5'e kadar olan say─▒m─▒ istiyorsan─▒z, ┼čunu yap─▒n:

 for count, item in enumerate(items, start=1):
    print(count, item)
 

Unidiomatic kontrol ak─▒┼č─▒

─░stedi─činiz ┼čey, a┼ča─č─▒daki seviyelerin Pythonic e┼čde─čeridir; bu, alt seviye dillerinin ├žo─ču programlay─▒c─▒s─▒n─▒n kullanaca─č─▒ algoritmad─▒r:

 index = 0            # Python's indexing starts at zero
for item in items:   # Python's for loops are a "for each" loop 
    print(index, item)
    index += 1
 

Veya her bir d├Âng├╝ i├žin olmayan dillerde:

 index = 0
while index < len(items):
    print(index, items[index])
    index += 1
 

veya bazen Python'da bulunan daha yayg─▒n (ancak s─▒radan olmayan):

 for index in range(len(items)):
    print(index, items[index])
 

Numaraland─▒rma ─░┼člevini kullan─▒n

Python'un enumerate i┼člevi , dizinleri hesaplamay─▒ gizleyerek ve yinelemeyi, dizinin enumerate iki ├Â─čeli bir demetini ve orijinal yinelemenin sa─člayaca─č─▒ ├Â─čeyi veren ba┼čka bir yinelemeye ( nesneyi) i├žine alarak g├Ârsel kar─▒┼č─▒kl─▒─č─▒ azalt─▒r . Bu gibi g├Âr├╝n├╝yor:

 for index, item in enumerate(items, start=0):   # default is zero
    print(index, item)
 

Bu kod ├Ârne─či, Python'un deyimsel olan kodu ile olmayan kod aras─▒ndaki fark─▒n kanonik bir ├Ârne─čidir. Deyimsel kod, kullan─▒m─▒ ama├žlanan ┼čekilde yaz─▒lm─▒┼č, karma┼č─▒k (ancak karma┼č─▒k de─čildir) Python'dur. Deyimsel kod, dilin tasar─▒mc─▒lar─▒ taraf─▒ndan beklenir, yani bu kod genellikle sadece daha okunakl─▒ de─čil, ayn─▒ zamanda daha verimlidir.

Bir say─▒m almak

Giderken endekslere ihtiyac─▒n─▒z olmasa bile, ancak ba┼člayabilece─činiz yinelemelerin bir say─▒s─▒na (bazen arzu edilir) ihtiyac─▒n─▒z olur 1 ve son say─▒ say─▒n─▒z olacakt─▒r.

 for count, item in enumerate(items, start=1):   # default is zero
    print(item)

print('there were {0} items printed'.format(count))
 

Say─▒, 1'den 5'e kadar istedi─činizi s├Âyledi─činizde, (indeks yerine) ne istemek istedi─činizi g├Âsteriyor.


Y─▒kma - ad─▒m ad─▒m a├ž─▒klama

Bu ├Ârnekleri y─▒kmak i├žin, bir indeksle yinelemek istedi─čimiz bir listenin bulundu─čunu s├Âyleyin:

 items = ['a', 'b', 'c', 'd', 'e']
 

┼×imdi bu yinelemeyi numaraland─▒rmak, numaraland─▒r─▒lm─▒┼č bir nesne olu┼čturmak i├žin ge├žiyoruz:

 enumerate_object = enumerate(items) # the enumerate object
 

─░lk ├Â─čeyi bu fonksiyondan ├ž─▒kartabiliriz, next fonksiyonla ilgili bir d├Âng├╝ elde ederiz :

 iteration = next(enumerate_object) # first iteration from enumerate
print(iteration)
 

Ve g├Âr├╝yoruz ki 0 ilk indeks ve 'a' ilk maddeden bir demet al─▒yoruz :

 (0, 'a')
 

bu iki demetten elemanlar─▒ ├ž─▒karmak i├žin " paket a├žma dizisi " olarak adland─▒r─▒lan─▒ kullanabiliriz :

 index, item = iteration
#   0,  'a' = (0, 'a') # essentially this.
 

ve inceledi─čimizde index , ilk dizini, 0 ve item ilk maddeyi ifade etti─čini g├Âr├╝yoruz 'a' .

 >>> print(index)
0
>>> print(item)
a
 

Sonu├ž

  • Python dizinleri s─▒f─▒rdan ba┼člar
  • Bu dizinleri, yinelendik├že yinelenebilir bir de─čerden almak i├žin, numaraland─▒rma i┼člevini kullan─▒n.
  • Numaraland─▒rmay─▒ deyimsel bir ┼čekilde kullanmak (a├žma paketiyle birlikte), daha okunakl─▒ ve bak─▒m─▒ kolay bir kod olu┼čturur:

├ľyleyse ┼čunu yap:

 for index, item in enumerate(items, start=0):   # Python indexes start at zero
    print(index, item)
 

701







┼×unlardan 1 ba┼čka birinden ba┼člatmak olduk├ža basit 0 :

 for index, item in enumerate(iterable, start=1):
   print index, item
 

Not

├ľnemli bir ipucu, ├ž├╝nk├╝ yan─▒lt─▒c─▒ biraz olsa index bir olacak tuple (idx, item) burada. Gitmek g├╝zel.


132


2014-05-27





 for i in range(len(ints)):
   print i, ints[i]
 

86







Python'daki norm gibi bunu yapman─▒n birka├ž yolu var. B├╝t├╝n ├Ârneklerde ┼č├Âyle varsay─▒lmaktad─▒r: lst = [1, 2, 3, 4, 5]

1. Numaraland─▒rman─▒n kullan─▒lmas─▒ ( en deyimsel )

 for index, element in enumerate(lst):
    # do the things that need doing here
 

Bu da benim g├Âr├╝┼č├╝me g├Âre en g├╝venli se├ženek ├ž├╝nk├╝ sonsuz ├Âzyinelemeye girme ┼čans─▒ ortadan kalkt─▒. Hem madde hem de indeksi de─či┼čkenlerde tutulur ve maddeye eri┼čmek i├žin daha fazla kod yazmaya gerek yoktur.

2. Dizini tutmak i├žin bir de─či┼čken olu┼čturma ( kullanarak for )

 for index in range(len(lst)):   # or xrange
    # you will have to write extra code to get the element
 

3. Dizini tutmak i├žin bir de─či┼čken olu┼čturmak ( kullanarak while )

 index = 0
while index < len(lst):
    # you will have to write extra code to get the element
    index += 1  # escape infinite recursion
 

4. Her zaman ba┼čka bir yol vard─▒r

Daha ├Ânce de a├ž─▒kland─▒─č─▒ gibi, bunu yapman─▒n ba┼čka yollar─▒ da burada a├ž─▒klanmam─▒┼č ve ba┼čka durumlarda daha da ge├žerli olabilirler. ├Ârne─čin ile kullanmak itertools.chain i├žin. Yuvalanm─▒┼č d├Âng├╝leri di─čer ├Ârneklerden daha iyi i┼čler.


43







Eski moda yol:

 for ix in range(len(ints)):
    print ints[ix]
 

Liste anlama:

 [ (ix, ints[ix]) for ix in range(len(ints))]

>>> ints
[1, 2, 3, 4, 5]
>>> for ix in range(len(ints)): print ints[ix]
... 
1
2
3
4
5
>>> [ (ix, ints[ix]) for ix in range(len(ints))]
[(0, 1), (1, 2), (2, 3), (3, 4), (4, 5)]
>>> lc = [ (ix, ints[ix]) for ix in range(len(ints))]
>>> for tup in lc:
...     print tup
... 
(0, 1)
(1, 2)
(2, 3)
(3, 4)
(4, 5)
>>> 
 

24







Python 2.7'deki d├Âng├╝ i├žindeki listenin dizinlerine eri┼čmenin en h─▒zl─▒ yolu k├╝├ž├╝k listeler i├žin range y├Ântemini kullanmak ve orta ve b├╝y├╝k boyutlu listeler i├žin enumerate y├Ântemdir .

L├╝tfen a┼ča─č─▒daki kod ├Ârneklerinde liste ve eri┼čim endeksi de─čerine ve performans ├Âl├ž├╝tlerine (sizin i├žin yararl─▒ olaca─č─▒n─▒ san─▒yorum) yinelemek i├žin kullan─▒labilecek farkl─▒ yakla┼č─▒mlara g├Âz at─▒n :

 from timeit import timeit

# Using range
def range_loop(iterable):
    for i in range(len(iterable)):
        1 + iterable[i]

# Using xrange
def xrange_loop(iterable):
    for i in xrange(len(iterable)):
        1 + iterable[i]

# Using enumerate
def enumerate_loop(iterable):
    for i, val in enumerate(iterable):
        1 + val

# Manual indexing
def manual_indexing_loop(iterable):
    index = 0
    for item in iterable:
        1 + item
        index += 1
 

A┼ča─č─▒daki her y├Ântem i├žin performans ├Âl├ž├╝mlerine bak─▒n:

 from timeit import timeit

def measure(l, number=10000):
print "Measure speed for list with %d items" % len(l)
print "xrange: ", timeit(lambda :xrange_loop(l), number=number)
print "range: ", timeit(lambda :range_loop(l), number=number)
print "enumerate: ", timeit(lambda :enumerate_loop(l), number=number)
print "manual_indexing: ", timeit(lambda :manual_indexing_loop(l), number=number)

measure(range(1000))
# Measure speed for list with 1000 items
# xrange:  0.758321046829
# range:  0.701184988022
# enumerate:  0.724966049194
# manual_indexing:  0.894635915756

measure(range(10000))
# Measure speed for list with 100000 items
# xrange:  81.4756360054
# range:  75.0172479153
# enumerate:  74.687623024
# manual_indexing:  91.6308541298

measure(range(10000000), number=100)
# Measure speed for list with 10000000 items
# xrange:  82.267786026
# range:  84.0493988991
# enumerate:  78.0344707966
# manual_indexing:  95.0491430759
 

Sonu├ž olarak, range y├Ântem kullanmak 1000 maddeyle listelenen en h─▒zl─▒ y├Ântemdir. > 10 000'den enumerate b├╝y├╝k olan liste i├žin kazan─▒r.

A┼ča─č─▒ya baz─▒ faydal─▒ ba─člant─▒lar ekleme:


18







├ľncelikle, dizinler 0 ila 4 aras─▒nda olacakt─▒r. Programlama dilleri 0'dan saymaya ba┼člar; Bunu unutmay─▒n, yoksa s─▒n─▒rlar istisnas─▒n─▒n d─▒┼č─▒nda bir endeksle kar┼č─▒la┼č─▒rs─▒n─▒z. For d├Âng├╝s├╝nde tek ihtiyac─▒n─▒z olan 0 ila 4 aras─▒nda say─▒lan bir de─či┼čkendir.

 for x in range(0, 5):
 

0'dan 5'e yazd─▒─č─▒m─▒ unutmay─▒n, ├ž├╝nk├╝ d├Âng├╝ maks. :)

Bir indeks kullan─▒m─▒n─▒n de─čerini almak i├žin

 list[index]
 

12







Bu tart─▒┼čmaya g├Âre: http://bytes.com/topic/python/answers/464012-objects-list-index

D├Âng├╝ sayac─▒ yineleme

Endeksler ├╝zerinde d├Âng├╝ i├žin ge├žerli deyim yerle┼čik range i┼člevini kullan─▒r:

 for i in range(len(sequence)):
    # work with index i
 

Hem elementler hem de endeksler ├╝zerinde d├Âng├╝, eski deyim ya da yeni zip yerle┼čik i┼člev kullan─▒larak sa─članabilir :

 for i in range(len(sequence)):
    e = sequence[i]
    # work with index i and element e
 

veya

 for i, e in zip(range(len(sequence)), sequence):
    # work with index i and element e
 

http://www.python.org/dev/peps/pep-0212/ arac─▒l─▒─č─▒ylahttp://www.python.org/dev/peps/pep-0212/


10







Bu kodla yapabilirsiniz:

 ints = [8, 23, 45, 12, 78]
index = 0

for value in (ints):
    index +=1
    print index, value
 

D├Âng├╝n├╝n sonunda indeks de─čerini s─▒f─▒rlaman─▒z gerekirse, bu kodu kullan─▒n:

 ints = [8, 23, 45, 12, 78]
index = 0

for value in (ints):
    index +=1
    print index, value
    if index >= len(ints)-1:
        index = 0
 

9


2015-05-25





Bu problem i├žin en iyi ├ž├Âz├╝m, enumerate in┼ča python fonksiyonunun kullan─▒lmas─▒d─▒r.
numaraland─▒rmak d├Ân├╝┼č tuple
ilk de─čer olan g├Âstergesi
, ikinci de─čer eleman─▒ bu dizin dizinin

 In [1]: ints = [8, 23, 45, 12, 78]

In [2]: for idx, val in enumerate(ints):
   ...:         print(idx, val)
   ...:     
(0, 8)
(1, 23)
(2, 45)
(3, 12)
(4, 78)
 

7







Endekslere for d├Âng├╝ olarak eri┼čirken elde edece─činiz i┼čte ┼čunlar:

for i in enumerate(items): print(i)


g├Âr├╝nt├╝ tan─▒m─▒n─▒ buraya girin

for i, val in enumerate(items): print(i, val)


g├Âr├╝nt├╝ tan─▒m─▒n─▒ buraya girin

for i, val in enumerate(items): print(i)


g├Âr├╝nt├╝ tan─▒m─▒n─▒ buraya girin

Bu yard─▒mc─▒ olur umar─▒m.


5







E─čer yinelemem nums = [1, 2, 3, 4, 5] olsayd─▒ yapard─▒m

 for i, num in enumerate(nums, start=1):
    print(i, num)
 

Veya uzunluk olarak l = len(nums)

 for i in range(1, l + 1):
    print(i, nums[i])
 

5







Listede yinelenen de─čer yoksa:

 for i in ints:
    indx = ints.index(i)
    print(i, indx)
 

4







Bunu da deneyebilirsiniz:

 data = ['itemA.ABC', 'itemB.defg', 'itemC.drug', 'itemD.ashok']
x = []
for (i, item) in enumerate(data):
      a = (i, str(item).split('.'))
      x.append(a)
for index, value in x:
     print(index, value)
 

Çıktı

 0 ['itemA', 'ABC']
1 ['itemB', 'defg']
2 ['itemC', 'drug']
3 ['itemD', 'ashok']
 

3







Sorunuzda "Bu durumda 1'den 5'e kadar d├Âng├╝ dizinine nas─▒l eri┼čebilirim?" Yaz─▒yorsunuz.

Ancak, bir listenin dizini s─▒f─▒rdan ├žal─▒┼č─▒r. ├ľyleyse, ger├žekte ne istedi─činizi bir listedeki her bir ├Â─če i├žin indeks ve ├Â─če olup olmad─▒─č─▒n─▒ veya ger├žekten 1'den ba┼člayan say─▒lar─▒ isteyip istemedi─činizi bilmemiz gerekir. Neyse ki, Python'da, her ikisini birden yapmak kolayd─▒r.

─░lk olarak, netle┼čtirmek i├žin, enumerate i┼člev listedeki her bir ├Â─če i├žin dizini ve kar┼č─▒l─▒k gelen ├Â─čeyi yinelemeli olarak d├Ând├╝r├╝r.

 alist = [1, 2, 3, 4, 5]

for n, a in enumerate(alist):
    print("%d %d" % (n, a))
 

Yukar─▒dakilerin ├ž─▒kt─▒s─▒,

 0 1
1 2
2 3
3 4
4 5
 

Endeksin 0'dan ba┼člad─▒─č─▒na dikkat edin. Bu t├╝r bir indeksleme Python ve C gibi modern programlama dilleri aras─▒nda yayg─▒nd─▒r.

D├Âng├╝n├╝z├╝n listenin bir b├Âl├╝m├╝n├╝ kapsamas─▒n─▒ istiyorsan─▒z, listenin bir k─▒sm─▒ i├žin standart Python s├Âzdizimini kullanabilirsiniz. ├ľrne─čin, bir listedeki ikinci ├Â─čeden son ├Â─čeye kadar olanlar─▒ da i├žermeyen bir d├Âng├╝ye girmek i├žin,

 for n, a in enumerate(alist[1:-1]):
    print("%d %d" % (n, a))
 

Bir kez daha ├ž─▒kt─▒ endeksinin 0'dan ├žal─▒┼čt─▒─č─▒n─▒ unutmay─▒n.

 0 2
1 3
2 4
 

Yani bizi getiriyor start=n i├žin anahtar─▒ enumerate() . Bu sadece indeksi ofset eder, e┼čit olarak basit├že d├Âng├╝ i├žindeki indise bir say─▒ ekleyebilirsiniz.

 for n, a in enumerate(alist, start=1):
    print("%d %d" % (n, a))
 

├ž─▒kt─▒

 1 1
2 2
3 3
4 4
5 5
 

3


2018-08-15





index Y├Ântemi kullanabilirsiniz

 ints = [8, 23, 45, 12, 78]
inds = [ints.index(i) for i in ints]
 

EDIT Yorumda, bu y├Ântemin kopyalar varsa i┼če yaramayaca─č─▒n─▒ vurgulayan ints a┼ča─č─▒daki y├Ântem, a┼ča─č─▒daki de─čerler i├žin ├žal─▒┼čmal─▒d─▒r ints :

 ints = [8, 8, 8, 23, 45, 12, 78]
inds = [tup[0] for tup in enumerate(ints)]
 

Veya alternatif olarak

 ints = [8, 8, 8, 23, 45, 12, 78]
inds = [tup for tup in enumerate(ints)]
 

E─čer hem endeksi hem de de─čeri ints tuples listesi olarak almak istiyorsan─▒z .

Bu enumerate sorunun se├žilen cevab─▒ndaki y├Ântemini kullan─▒r , ancak daha az kodla daha h─▒zl─▒ hale getirerek liste kavrar.


1







Bir for d├Âng├╝ kullanarak liste anlama (indeks, de─čer) dizisini yazd─▒rmak i├žin :

 ints = [8, 23, 45, 12, 78]
print [(i,ints[i]) for i in range(len(ints))]
 

Çıktı:

 [(0, 8), (1, 23), (2, 45), (3, 12), (4, 78)]
 

0


2018-04-24





Bu, amaca yeterince iyi hizmet eder:

 list1 = [10, 'sumit', 43.21, 'kumar', '43', 'test', 3]
for x in list1:
    print('index:', list1.index(x), 'value:', x)
 

0



─░lgili yay─▒nlar


Java'da D├Âng├╝ ─░├žin Sonraki ─░terasyon'a Git

Python'da loop i├žin ilk giri┼či atla?

Her d├Âng├╝de bir Hash dizinine eri┼čmek m├╝mk├╝n m├╝?

EACH d├Âng├╝s├╝nde mevcut indeksi bulma (Ruby) [duplicate]

Her bir Kotlin i├žin ge├žerli endekse nas─▒l girilir

'For' d├Âng├╝s├╝ne y├Ânelik aral─▒k tabanl─▒ bir├žok basit algoritma kullan─▒mdan kald─▒r─▒l─▒yor mu?

D├Âng├╝ sonunda ÔÇť;ÔÇŁ nin amac─▒ nedir?

perl'de foreach d├Âng├╝s├╝nde otomatik olarak indeksini al

D├Âng├╝ tabanl─▒ aral─▒─č─▒n i├žindeki sahnelerin arkas─▒ndaki a┼ča─č─▒daki liste nedir?

C++ 17'de 'for' loop spesifikasyonu esas aral─▒─č─▒ neden de─či┼čti? [├žift]

Etiketle ilgili di─čer sorular [python]


Vim kayd─▒ nedir ve nas─▒l devre d─▒┼č─▒ b─▒rak─▒labilir?

.Gitconfig'te kendim i├žin birden fazla kullan─▒c─▒ belirleyebilir miyim?

Android 8 i├žin Java 8 kullanmak m├╝mk├╝n m├╝?

Bo┼č olmayan bir dizine nas─▒l kopyalar─▒m?

Ko┼čullara g├Âre belirli bir rotaya y├Ânlendirme

Gemfile'de 'zorunlu: yanl─▒┼č' ne demektir?

─░┼člem ├ç─▒k─▒┼č Koduna G├Âre Kabuk Beti─činden ├ç─▒kma

ASP.NET MVC'de tam i┼člem URL'sini alma [duplicate]

Java: notify () vs. notifyAll () tekrar ba┼čtan

Aktif ├žocu─čun ebeveyni i├žin karma┼č─▒k CSS se├žici [kopya]