İlk öğeyi listeden nasıl kaldırırım?


Yanıtlar:


1259

Python Listesi

list.pop (endeks)

>>> l = ['a', 'b', 'c', 'd']
>>> l.pop(0)
'a'
>>> l
['b', 'c', 'd']
>>> 

del list [dizin]

>>> l = ['a', 'b', 'c', 'd']
>>> del l[0]
>>> l
['b', 'c', 'd']
>>> 

Her ikisi de orijinal listenizi değiştirir.

Diğerleri dilimleme kullanılmasını önerdi:

  • Listeyi kopyalar
  • Bir alt kümeyi döndürebilir

Ayrıca, çok sayıda pop (0) gerçekleştiriyorsanız, collections.deque'ye bakmalısınız.

from collections import deque
>>> l = deque(['a', 'b', 'c', 'd'])
>>> l.popleft()
'a'
>>> l
deque(['b', 'c', 'd'])
  • Listenin sol ucundan daha yüksek performans patlaması sağlar

Listelerle aynı anlama gelen negatif dizinler de kullanabilirsiniz.
Gabriel Devillers

189

Dilimleme:

x = [0,1,2,3,4]
x = x[1:]

Bu aslında orijinalin bir alt kümesini döndürür, ancak değiştirmez.


17
eğer xboştur, x=x[1:]bu şikayet etmeden boşaltmak bırakacaktı. x.pop(0)boş bir listeye atılacaktı x. Bazen fırlatma istediği şeydir: Listede en az bir eleman olduğu varsayımı yanlışsa, bildirim almak isteyebilirsiniz.
ead

Bunun için teşekkürler! Bu daha iyi bir cevap, imo, çünkü yıkıcı değil
Hee Jin


29

Liste dilimleme ile daha fazla ayrıntı için listeler hakkında Python öğreticisine bakın:

>>> l = [0, 1, 2, 3, 4]
>>> l[1:]
[1, 2, 3, 4]

29

sadece bunu yapardın

l = [0, 1, 2, 3, 4]
l.pop(0)

veya l = l[1:]

Lehte ve aleyhte olanlar

Pop'u kullanarak değeri alabilirsiniz

diyelim x = l.pop(0) xolurdu0


15

Ardından silin:

x = [0, 1, 2, 3, 4]
del x[0]
print x
# [1, 2, 3, 4]

8

Sen kullanabilirsiniz list.reverse()sonra, listeyi ters list.pop()örneğin son öğe kaldırmak için:

l = [0, 1, 2, 3, 4]
l.reverse()
print l
[4, 3, 2, 1, 0]


l.pop()
0
l.pop()
1
l.pop()
2
l.pop()
3
l.pop()
4

5

Ayrıca kullanabilirsiniz list.remove(a[0])üzere poplistedeki ilk eleman dışarı.

>>>> a=[1,2,3,4,5]
>>>> a.remove(a[0])
>>>> print a
>>>> [2,3,4,5]

3
OP bunu yapmanın en iyi yolunu sormuyor. Bu, aynı şeyi başarmak için başka bir yaklaşımdır!
tepe

1
Evet, diğer cevaplara göre avantajı olmayan başka bir yaklaşım. Bunu yapmanın çeşitli yolları vardır. Neden cevap vermiyorsun a.remove(a[1-1])? Bu başka bir yol.
Ned Batchelder

2
Demek istediğim, cevabınızın diğer cevaplardan daha kötü olduğu ve bunu önerecek hiçbir şeyi olmadığı. Bu cevabı diğerleri üzerinde kullanmak için hiçbir neden yoktur. Bunun "başka bir yol" olması, onu buraya eklemek için bir neden değil.
Ned Batchelder

4
@NedBatchelder Amacınız tartışmalı. Bu belirli göreve özel olarak Python'daki listeler için mevcut olan ekstra bir yöntemdir ve eksiksizlik uğruna not edilmelidir. Öte yandan BS a [1-1] örneği değil. Cevabının hiçbir şekilde "diğer cevaplardan daha kötü" olduğunu söylememek gerekir.
Hejazzman

8
Sorumun yanındayım: bu garip ve dürüst görünüyor ve bunu tavsiye edecek bir şey yok. Aslında, ilk cümle yanıltıcıdır, çünkü i'th öğesini kaldıramazsınız list.remove(a[i]). Yinelenen değerlerle, aynı değere sahip önceki bir öğeyi bulabilir ve i'th yerine bu öğeyi kaldırabilir.
Ned Batchelder

4

Numpy ile çalışıyorsanız delete yöntemini kullanmanız gerekir :

import numpy as np

a = np.array([1, 2, 3, 4, 5])

a = np.delete(a, 0)

print(a) # [2 3 4 5]

1

Listeden daha hızlı ve verimli olan "deque" veya çift uçlu kuyruk adı verilen bir veri yapısı vardır. Listenizi kullanabilir ve deque dönüştürmek ve içinde gerekli dönüşümleri yapabilirsiniz. Deque'yi tekrar listeye dönüştürebilirsiniz.

import collections
mylist = [0, 1, 2, 3, 4]

#make a deque from your list
de = collections.deque(mylist)

#you can remove from a deque from either left side or right side
de.popleft()
print(de)

#you can covert the deque back to list
mylist = list(de)
print(mylist)

Deque ayrıca listenin her iki tarafına veya belirli bir dizine öğe eklemek gibi çok kullanışlı işlevler sağlar. Ayrıca bir deque döndürebilir veya tersine çevirebilirsiniz. Bir şans ver!!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.