Python'daki Listelerden Öğeler Nasıl Kaldırılır
Bir python listesinden öğeleri kaldırmak, çeşitli tekniklerle gerçekleştirebileceğiniz ortak bir görevdir. Bir öğeyi konumuna veya değerine göre kaldırmanız gerekir, Python sizi kapsar. Bu öğreticide, del
ifadesi ve .remove() gibi öğeleri bir listeden kaldırmak için farklı yaklaşımları keşfedeceksiniz.
.
.remove()
yöntemi, belirtilen değerin ilk oluşumunu silmenize olanak tanırken .pop()
, bir öğeyi dizinine göre kaldırıp geri döndürebilir. del
ifadesi, öğeleri dizine göre kaldırmanın başka bir yolunu sunar ve bunu bir listenin dilimlerini silmek için de kullanabilirsiniz. Seçtiğiniz yaklaşım özel ihtiyaçlarınıza bağlı olacaktır.
Bu öğreticinin sonunda şunları anlayacaksınız:
- Python'da bir listeden bir öğeyi kaldırmak için
.pop()
,del
gibi çeşitli yaklaşımları kullanabilirsiniz. ,.remove()
ve.clear()
. - Bir listedeki belirli bir konumdan öğeleri kaldırmak için
.pop()
yöntemini kullanırsınız. - Python'da bir listedeki öğeleri ve dilimleri silmek için
del
ifadesini kullanırsınız. - Bir listeden belirli bir değerin ilk oluşumunu silmek için
.remove()
yöntemini kullanırsınız. - Bir listeden tüm öğeleri kaldırmak için
.clear()
kullanırsınız. - Ayrıca döngü , sözlük veya set kullanarak yinelenen öğeleri de kaldırabilirsiniz.
Bu eğitimden en iyi şekilde yararlanmak için liste oluşturma, listeye öğe ekleme ve listedeki öğelere erişme gibi temel Python list
konularına aşina olmanız gerekir.
Bir listeden belirli öğeler nasıl kaldırılır
Python listesinde
gerçekleştireceğiniz yaygın işlemlerden biri belirli liste öğelerini kaldırmaktır. Öğeleri listedeki konumlarına veya değerlerine göre kaldırmanız gerekebilir.
Bu görevi nasıl başarabileceğinizi göstermek için, bir halk kütüphanesi için bir web sitesi oluşturduğunuzu varsayalım. Web uygulamanız, kullanıcıların okumak istedikleri kitapların bir listesini kaydetmelerine olanak tanır. Ayrıca, listeden kitapları düzenlemelerine ve kaldırmalarına izin vermeli ve listeyi sıralamalıdır.
Kullanıcının okuma listesini kitap başlıklarından oluşan bir koleksiyon olarak saklamak için Python listesini kullanabilirsiniz. Örneğin okuma listesi şuna benzer:
>>> books = ["Dragonsbane", "The Hobbit", "Wonder", "Jaws"]
Artık bir kitap listeniz olduğuna göre, tek ve belirli bir kitabı listeden kaldırmanın birkaç yolu vardır. Yaklaşımlardan biri .pop()
yöntemini kullanmaktır.
.pop() yöntemini kullanarak öğeleri kaldırma
Bazen listede belirli bir konumdaki öğeleri kaldırmanız gerekebilir. Örneğin, bir halk kütüphanesi uygulamasında kullanıcılar, kullanıcı arayüzündeki onay kutularını işaretleyerek kaldırılacak kitapları seçebilir. Uygulamanız, seçilen her öğeyi, öğenin listedeki konumu olan dizinine göre silecektir.
Kaldırmak istediğiniz öğenin dizinini biliyorsanız, .pop()
yöntemini kullanabilirsiniz. Bu yöntem, öğenin dizinini isteğe bağlı bir bağımsız değişken olarak alır ve ardından öğeyi bu dizindeki kaldırır ve döndürür. Yöntem çağrısına bir dizin argümanı geçirmezseniz,
Python listelerinin konumlandırma için sıfır tabanlı indeksleme kullandığını unutmayın; bu, listedeki ilk öğenin dizin 0'da olduğu, ikinci öğenin dizin 1'de olduğu vb. anlamına gelir. Bunu göz önünde bulundurarak, kitaplar
listenizdeki ilk öğeyi kaldırmak ve görüntülemek için .pop()
'u nasıl kullanabileceğinizi gösteren bir örneği burada bulabilirsiniz:
>>> books.pop(0)
'Dragonsbane'
kitaplar
listesindeki .pop()
yöntemini, listedeki ilk öğeyi belirten 0
dizini ile çağırırsınız. Bu çağrı, ilk başlık olan Dragonsbane'i listeden kaldırır ve ardından onu döndürür.
Bu kodu çalıştırdıktan sonra listenizin içeriğini kontrol ederseniz Dragonsbane'in artık orada olmadığını fark edeceksiniz:
>>> books
['The Hobbit', 'Wonder', 'Jaws']
Burada .pop()
çağrısından sonra kitap listesini tekrar görüntülersiniz. .pop()
ilk başlığı kaldırdığı için listenizin artık bir öğe daha kısa olduğunu görebilirsiniz.
Öğreticide daha önce öğrendiğiniz gibi, .pop()
Bir öğeyi kaldırır ve ayrıca diğer işlemler için kullanabileceğiniz değerini döndürür. Örneğin, kütüphane uygulamasının kullanıcıların okudukları ayrı bir kitap listesini depolamalarına da izin verdiğini varsayalım. Kullanıcı bir kitap okuduktan sonra, ilk kitap listesinden kaldırabilir ve başlığı okuma listesine aktarabilirler:
>>> books = ["Dragonsbane", "The Hobbit", "Wonder", "Jaws"]
>>> read_books = []
>>> read = books.pop(0)
>>> read_books.append(read)
>>> read_books
['Dragonsbane']
>>> books
['The Hobbit', 'Wonder', 'Jaws']
Örnekteki ikinci satırda, kullanıcının okuduğu kitapların adlarını saklamak için read_books
adlı yeni, boş bir liste oluşturursunuz. Daha sonra, ilk başlığı orijinal kitap listesinden kaldırmak ve bir değişkende saklamak için .pop()
yöntemini kullanırsınız. Daha sonra, saklanan başlığı read_books
listesine eklemek için .append()
komutunu kullanırsınız.
Her iki listenin içeriğini incelediğinizde, okuma listesinin artık ilk kaldırılan başlığı içerdiğini, orijinal kitap listesinin ise artık bu başlığı içermediğini görüyorsunuz.
Boş bir listede .pop()
yöntemini çağırırsanız, yöntem bir indexerror
istisna oluşturur:
>>> books.pop()
'Jaws'
>>> books.pop()
'Wonder'
>>> books.pop()
'The Hobbit'
>>> books.pop()
Traceback (most recent call last):
...
IndexError: pop from empty list
Bu örnekte, listenizdeki her başlığı kaldırarak .pop()
öğesini tekrar tekrar çağırırsınız. .pop()
'a yaptığınız son çağrı, yöntemi boş bir listede çağırdığınız için IndexError
istisnasıyla sonuçlanır.
Not: Herhangi bir bağımsız değişken olmadan .pop()
çağrısını hatırlayın.
.pop()
yöntemi, liste boyutundan daha büyük bir dizin bağımsız değişkeni ile çağırırsanız, bir indexerror
de oluşturur:
>>> books = ["Dragonsbane", "The Hobbit", "Wonder", "Jaws"]
>>> books.pop(50)
Traceback (most recent call last):
...
IndexError: pop index out of range
Bu kod snippet'inde, yalnızca dört öğe içeren orijinal kitap listesinde .pop()
adını veriyorsunuz. Dizin 50'deki öğe için .pop()
yöntemini kullandınız, ancak bu aralık dışı çünkü liste o kadar büyük değil, bu yüzden dizinerror
yükseltiyor.
Negatif bir dizin, .pop()
argümanı olarak kullanmak, listenin başlangıcından başlamak yerine liste öğelerini sağdan sola kaldırmanıza olanak tanır. Örneğin, -1 dizin listedeki son öğeye erişir, -2 dizin ikinci ila son öğeye erişir. Bu desene göre, kitaplar [-len (kitaplar)]
ilk öğeyi döndüren negatif bir dizindir.
Aşağıdaki örnek, listedeki son öğeyi kaldırmak için .pop()
ile negatif dizinin nasıl kullanılacağını gösterir::
>>> books = ["Dragonsbane", "The Hobbit", "Wonder", "Jaws"]
>>> books.pop(-1)
'Jaws'
>>> books
['Dragonsbane', 'The Hobbit', 'Wonder']
Bağımsız değişken olarak -1
'i kullanarak listedeki .pop()
'u çağırırsınız. Bu dizin, son başlık olan Jaws'ı listeden kaldırır. Listenin içeriğini tekrar kontrol ettiğinizde son öğenin kaldırıldığını görebilirsiniz. Aynı etkiyi elde etmek için books.pop()
'u herhangi bir argüman olmadan da çağırabilirdiniz.
Öğeleri del
ifadesiyle silme
Ayrıca, del
ifadesiyle belirli bir dizinden öğeleri kaldırabilirsiniz. .pop()
yöntemi gibi, del
Bir öğeyi verilen konumdaki kaldırır, ancak değeri döndürmez.
Açıklamak için, Halk Kütüphanesi uygulamanızın kullanıcısının listeye iki kez yanlışlıkla bazı kitaplar eklediğini söyleyin. Aşağıdaki örnekte, yinelenen kitap başlıklarını kaldırmak için del
'nin nasıl düzgün kullanılacağını göstermektedir:
>>> >>> books = [
... "Dragonsbane",
... "The Hobbit",
... "Wonder",
... "Wonder",
... "Jaws",
... "Jaws",
... ]
>>> del books[2]
>>> books
['Dragonsbane', 'The Hobbit', 'Wonder', 'Jaws', 'Jaws']
Vurgulanan satıra, önce del
anahtar sözcüğünü, ardından liste değişkeninizin adını ve ardından köşeli parantez içinde istediğiniz dizini yazarsınız.
Tıpkı .pop()
yönteminde olduğu gibi, öğeleri bir listenin sonundan kaldırmak için del
ifadesiyle negatif dizin değerlerini de kullanabilirsiniz:
>>> del books[-1]
Listedeki son öğeyi .pop()
yöntemini kullanın.
.pop()
yöntemine benzer şekilde, geçersiz dizine sahip bir listede del
kullanmaya çalışırsanız bir IndexError
istisnasıyla karşılaşırsınız :
>>> books = ["Dragonsbane", "The Hobbit", "Wonder", "Jaws"]
>>> del books[100]
Traceback (most recent call last):
...
IndexError: list assignment index out of range
Kitap listesi yalnızca dört öğe içeriyor, ancak 100
dizinini kullanarak listede del
'i çalıştırmayı deniyorsunuz. 100
konumunda öğe olmadığından bu dizin aralık dışında.
.pop()
'dan farklı olarak, bir del
ifadesi ile bir dizin değeri sağlamalısınız. Yapmazsanız, program bir SynTaxError
oluşturur:
>>> del books[]
File "<input>", line 1
del books[]
^
SyntaxError: invalid syntax
del
deyimini dizin olmadan çalıştırırsınız ve bu durum, dizin oluşturma işlecinin bir hedef dizin gerektirmesi nedeniyle SyntaxError
istisnasıyla sonuçlanır. Bu ifade, argüman olmadan .pop()
çağrısının yaptığı gibi listedeki son öğeyi silmez.
Öğeleri .remove()
yöntemi ile değere göre kaldırma
Kitap Listesi uygulamasının, kullanıcıların listeden silmek için bir başlık girebileceği bir metin alanı sağladığını varsayalım.
Bir öğeyi listeden dizine göre değil de değerine göre kaldırmak istiyorsanız .remove()
yöntemini kullanabilirsiniz. Bağımsız değişken olarak tek bir değer gerektirir ve listede bu değerle eşleşen ilk öğeyi kaldırır:
>>> books = ["Dragonsbane", "The Hobbit", "Wonder", "Jaws"]
>>> books.remove("The Hobbit")
>>> books
['Dragonsbane', 'Wonder', 'Jaws']
Bu örneğin ikinci satırında, Hobbit 'i kitap listesinden kaldırmak için
Listede olmayan bir değerle .remove()
çağırırsanız, yöntem aşağıdaki kodda gösterildiği gibi bir valueError
istisnasını oluşturur:
>>> books = ["Dragonsbane", "The Hobbit", "Wonder", "Jaws"]
>>> books.remove("The Two Towers")
Traceback (most recent call last):
...
ValueError: list.remove(x): x not in list
Ayrıca, .pop()
'dan farklı olarak, bir değer iletmeden .remove()
adını veremezsiniz:
>>> books.remove()
Traceback (most recent call last):
...
TypeError: list.remove() takes exactly one argument (0 given)
Burada, .remove()
'u argüman olarak iletmeden çağırırsınız. Sonuç olarak, yöntemin bir bağımsız değişken gerektirdiğini açıklayan bir TypeError
iletisi alırsınız.
Bir listenin bir bölümünü sil
Kullanıcınızın bir listeden aynı anda birkaç öğeyi kaldırması gerekebilir. Halk kütüphanesi uygulamanızın, bir e-posta hizmetine veya alışveriş sitesine benzer şekilde, sayfa başına belirli sayıda öğe görüntülediğini ve kullanıcının o sayfadaki tüm öğeleri tek seferde seçip silmesine olanak tanıdığını varsayalım.
Listede sayfa başına 25 öğe gösteriliyorsa, kullanıcının her birine tıklayıp tek tek silmek yerine 25 öğenin tamamını toplu olarak kaldırması daha hızlı olacaktır.
Bu tür bir silme işlemini, belirli bir dizinden öğeleri kaldırmak için daha önce kullandığınız del
ifadesiyle yapabilirsiniz. del
ifadesi, listenin dilimlerini bir kerede silmenizi sağlar, bu nedenle tek bir dizin bağımsız değişkeni sağlamak yerine, bir kolonla ayrılmış kapsayıcı bir başlangıç pozisyonu ve özel bir son pozisyonu geçersiniz.
del
ifadesi, listedeki bu dizin aralığında olan tüm öğeleri kaldırır. Örneğin, ilk üç kitabı listeden kaldırmak istediğinizi varsayalım:
>>> books = ["Dragonsbane", "The Hobbit", "Wonder", "Jaws"]
>>> del books[0:3]
>>> books
['Jaws']
İkinci satırda liste dilimini silen del
deyimi çağrısını çağırırsınız. Ardından, ilk üç öğenin silindiğini gösteren güncellenmiş listeyi görüntülersiniz. Dizin değerlerinin 0
dizininden başlayıp yukarıya doğru çıktığını ancak 3
dizinini içermediğini unutmayın. Yani kodda ilk üç başlığı listeden kaldırdınız.
Aşağıdaki örnekte gösterildiği gibi, bir dizi liste öğesini silmek için del
ile negatif dizin değerlerini de kullanabilirsiniz:
>>> books = ["Dragonsbane", "The Hobbit", "Wonder", "Jaws", "It"]
>>> del books[-3:-1]
>>> books
['Dragonsbane', 'The Hobbit', 'It']
Bu örnekte, ikinci satırda, -3 dizininden başlayarak (Wonder girişi) ve -1 dizinindeki öğeyi içermeyen (It ) kadar olan kitapları silersiniz. ). Negatif endekslerde öğeleri listenin sonundan geriye doğru sayacağınızı unutmayın. Örneğin, del kitaplar[-3:-1]
ifadesi bu durumda del kitaplar[2:4]
ile eşdeğerdir.
Bir listeden tüm öğeleri temizleyin
Kullanıcınızın kitap listesini tamamen temizlemek istediğini varsayalım. .clear()
yöntemini kullanarak bir listeden tüm öğeleri kaldırabilirsiniz. İşte böyle çalışıyor:
>>> books = ["Dragonsbane", "The Hobbit", "Wonder", "Jaws", "It"]
>>> books.clear()
>>> books
[]
İlk satırda, argüman almayan ve listeden tüm öğeleri kaldıran .clear()
yöntemini çağırırsınız. Daha sonra kitapları
incelersiniz, bu da listenin artık boş olduğunu doğrular.
Bir döngü ile kopyaları kaldırın
Bir listede yinelenen girişlere izin veren bir uygulama üzerinde çalıştığınızı varsayalım. Örneğin, bir iletişim kitabı uygulaması, aynı telefon numarasına sahip ancak farklı adlarla birden fazla kişiye izin verebilir. Bu durumda, yinelenen telefon numaralarına sahip bir listeyle karşılaşabilirsiniz.
Kopyaları listeden kaldırmak için döngü ve liste yöntemlerinin bir kombinasyonunu kullanabilirsiniz. Bu yaklaşım, listeden tekrarlanmayı ve bu değerin birden fazla oluşumu olduğunda bir değerin her bir örneğini kaldırmayı içerir.
Daha önce, .remove()
yönteminin yalnızca değer bağımsız değişkeniyle eşleşen bir öğenin ilk örneğini nasıl kaldırdığını gördünüz. Şimdi, bir döngüde nasıl kullanabileceğinizi göreceksiniz.
Kolaylık olması açısından, kişi defteri uygulamanızın, başlangıçta iki haneli ülke kodunu içeren kısa telefon numaralarının bulunduğu bir ülkede kullanıldığını düşünün. Ayrıca listedeki sayıların sırasının da önemli olduğunu varsayalım. Kişi listeniz şöyle görünebilir:
>>> phone_numbers = ["54123", "54123", "54456", "54789", "54789", "54123"]
İlk olarak, listede bir sayı kaç kez göründüğünü belirlemeniz gerekir. Python, listede belirtilen bir değerin oluşum sayısını döndüren .count()
yöntemini sağlar.
Örneğin, kişi listesinde 54123
numarasının kaç kez göründüğünü belirlemek için .count()
komutunu kullanabilirsiniz:
>>> phone_numbers.count("54123")
3
.count()
çağrısı 3
değerini döndürür ve listede telefon numarasının kaç örneğinin bulunduğunu bilmenizi sağlar. Daha sonra, kopyaları kaldırmak için döngü oluşturmanın zamanı geldi. Sayının birden fazla örneğinin olup olmadığını kontrol eden ve ardından yalnızca bir sayı kalana kadar her kopyayı kaldıran bir döngü oluşturabilirsiniz.
.count()
yöntemini ve bir döngüyü kullanarak kişi listesinde yinelemeler yapabilir ve sayı birden büyük olduğu sürece her numara için örneklerden birini kaldırabilirsiniz:
>>> phone_numbers = ["54123", "54123", "54456", "54789", "54789", "54123"]
>>> for phone_number in phone_numbers[:]:
... while phone_numbers.count(phone_number) > 1:
... phone_numbers.remove(phone_number)
...
>>> phone_numbers
['54456', '54789', '54123']
Bu örnekte, kopyalı telefon numaralarının listesini görürsünüz. İkinci satırda, döngü için her sayıya birer birer bakacak bir ayarladınız. Bir sayının sayımı birden fazla olsa da, listede bir argüman olarak listede
.remove()
adını veriyorsunuz. Döngü bittikten sonra, herhangi bir kopya olmadan bir listeniz olacak. Son listedeki siparişin her öğenin son olayına dayandığını unutmayın.
Kopyaları kaldırmanın daha özlü bir yolu için bir sözlük de kullanabilirsiniz. Sözlük, değerlerle eşlenmiş benzersiz anahtarların ilişkisel bir koleksiyonunu temsil eden bir Python veri türüdür. Sözlükler yinelenen anahtar içeremediğinden, listenizdeki kopyaları kaldırmak için
>>> phone_numbers = ["54123", "54123", "54456", "54789", "54789", "54123"]
>>> phone_numbers = list(dict.fromkeys(phone_numbers))
>>> phone_numbers
['54123', '54456', '54789']
Listenizi yinelenen anahtarlar olmadan bir sözlüğe dönüştürmek için .fromkeys()
yöntemini kullanırsınız. Daha sonra sözlüğü, kopyaların kaldırıldığı bir listeye geri dönüştürürsünüz. Sözlükler ekleme sırasını korur; böylece tekilleştirilmiş listenizdeki öğelerin orijinaldeki gibi sıralandığından emin olursunuz. Bu yöntemle son sıralama, her bir öğenin ilk ortaya çıkış sırasına karşılık gelir.
Kopyaları kaldırmak için bir set kullanın
Önceki kişi defteri örneğinde, listedeki numaraların sırası önemliydi. Ancak bir listedeki yinelenen öğeleri kaldırmak istiyorsanız ve öğelerin sırasını önemsemiyorsanız liste yerine küme kullanmayı düşünün. set
, Python'da yinelenen öğelere izin vermeyen yerleşik bir koleksiyon türüdür.
Aşağıdaki örnek, bir listeyi bir dizi benzersiz telefon numarasına nasıl dönüştürebileceğinizi göstermektedir:
>>> phone_numbers = ["54123", "54123", "54456", "54789", "54789", "54123"]
>>> set(phone_numbers)
{'54123', '54789', '54456'}
Vurgulanan satırda, listeyi bir kümeye dönüştürerek tüm yinelenen girişleri kaldırarak set()
kullanırsınız. Setlerin sıralanmamış koleksiyonlar olduğunu unutmayın, böylece liste öğelerinizin orijinal sıralarında düzenleneceğini garanti etmezler. Bu davranış nedeniyle, bir set, projeniz öğelerin sipariş edilmesini gerektiriyorsa kullanılacak doğru veri türü olmayabilir.
Ancak setler bir liste halinde sıralanabilir; bu, kişi listeleri ve benzeri diğer uygulamalar için genellikle önemli bir gerekliliktir. Ayrıca verimli üyelik testini de destekleyerek koleksiyonda bir değerin mevcut olup olmadığını hızlı bir şekilde kontrol etmenize olanak tanır.
Çözüm
Konuma veya değere göre Python listesinden
öğeleri kaldırmak için çeşitli teknikler öğrendiniz. .pop()
, .remove()
ve .clear()
gibi yöntemleri araştırdınız. Ayrıca del
ifadesini de öğrendiniz. Bu araçların her biri liste manipülasyonuna benzersiz bir yaklaşım sunar. Ayrıca döngüler, sözlükler ve kümeler gibi diğer yaklaşımları kullanarak kopyaları kaldırmayı da araştırdınız.
Listeler bir Python geliştiricisi için listeler önemlidir, çünkü listeler Python'da temel bir veri türüdür.
Bu eğiticide şunları nasıl yapacağınızı öğrendiniz:
- .pop() ve del kullanarak bir listeden bir listeden bir listeden kaldırın.
- Belirtilen değerin ilk oluşumunu silmek için
.remove()
yöntemini kullanın - Dilimleri veya bölümleri
del
ifadesini içeren bir listeden silin .clear()
yöntemini kullanarak listedeki tüm öğeleri temizleyin- döngü , sözlük veya set ile kopya öğeleri kaldır
Bu beceriler, Python projelerinizdeki listeleri verimli bir şekilde manipüle etmenize izin vererek kodunuzu çeşitli veri işleme ihtiyaçlarına daha sağlam ve uyarlanabilir hale getirecektir.