Çözüm
Evet yapabilirsin:
l = L[1::2]
Ve hepsi bu. Sonuç, aşağıdaki konumlara yerleştirilen öğeleri içerecektir ( 0
-based, yani ilk öğe konumunda 0
, ikinci öğe 1
vb.):
1, 3, 5
dolayısıyla sonuç (gerçek sayılar) şöyle olacaktır:
2, 4, 6
Açıklama
[1::2]
Sonunda sadece liste dilimleme için bir nottur. Genellikle şu biçimdedir:
some_list[start:stop:step]
Atlarsak start
, default ( 0
) kullanılır. Böylece ilk öğe ( 0
dizinler 0
-based olduğu için konumunda) seçilecektir. Bu durumda ikinci eleman seçilecektir.
İkinci öğe atlandığı için, varsayılan (listenin sonu) kullanılmaktadır. Yani liste, ikinci elemandan sonuna kadar yineleniyor .
Ayrıca üçüncü argüman ( step
) da sağladık 2
. Bu, bir öğenin seçileceği, bir sonraki öğenin atlanacağı vb. Anlamına gelir ...
Özetlemek gerekirse, bu durumda şu [1::2]
anlama gelir:
- ikinci öğeyi alın (bu arada, dizinden değerlendirirseniz, garip bir öğedir),
- bir öğeyi atlayın (çünkü sahip
step=2
olduğumuz için step=1
, varsayılan olanın aksine birini atlıyoruz ),
- sonraki öğeyi al,
- 2.-3. Adımları tekrarlayın. listenin sonuna gelene kadar,
DÜZENLEME : @PreetKukreti, Python'un liste dilimleme gösterimi hakkında başka bir açıklama için bir bağlantı verdi. Buraya bakın: Python'un dilim gösterimini açıklayın
Ekstralar - sayacı değiştirme enumerate()
Kodunuzda, sayacı açıkça yaratır ve artırırsınız. Python'da bu gerekli değildir, çünkü aşağıdakileri kullanarak tekrarlanabilir bir şekilde numaralandırabilirsiniz enumerate()
:
for count, i in enumerate(L):
if count % 2 == 1:
l.append(i)
Yukarıdakiler, kullandığınız kodla tam olarak aynı amaca hizmet eder:
count = 0
for i in L:
if count % 2 == 1:
l.append(i)
count += 1
for
Python'da sayaç ile döngüleri taklit etme hakkında daha fazla bilgi : Python 'for' döngülerinde dizine erişme