Gelişmiş Python Geliştirme Kursu
Bölüm
>
Seviye
Gelişmiş Listeler
Liste Anlamaları
Bu bölümde, Python'da listelerin optimizasyonu, bölümlendirilmesi ve tabloları andıran büyük çok boyutlu listeler (matrisler) oluşturma gibi yeni kullanım yöntemlerini keşfedeceğiz.
Bu seviyede, diğer listelerden yalnızca belirli bileşenleri seçerek oluşturulan listeler olan List Comprehensions üzerinde çalışacağız. Bu işlem, listeyi elle girmeye veya karmaşık otomasyonlar bulmaya gerek kalmadan, çok basit tek satırlık kod ile yapılır.

Amaç
Liste kavramalarını kullanarak, kilerdeki tüm kök sebzeleri toplayın ve doğru yerlerine yerleştirebilmek için sıralayın.
Kilerde, sıralanması gereken birkaç kese dolusu kök sebze bulunmaktadır; bunlar: potatoes, onions ve garlic. Muhtemelen bozulmuş sebzeler de vardır. İyi olan sebzeleri alın ve ait oldukları sandıklara yerleştirin.
Bunu başarmak için, her kesenin içinde neler olduğunu belirlemeniz gerekiyor. Her kese hakkında bilgiyi tutan üç (3) liste sabiti vardır; bunlar: left_sack, middle_sack, right_sack olarak adlandırılmıştır. Bu liste sabitleri, isimlerinde belirtilen konumlarda bulunan kaselerin yerlerini temsil eder.
Her kesenin önündeki ışıklı X işaretlerine gidin ve speak() fonksiyonunu kullanarak, örneğin: player.speak(left_sack) şeklinde, sabitler yardımıyla her kesenin içeriğini tanımlayın. Her kesenin içindeki içeriği belirledikten sonra, adı içinde: "Bad", "Spoiled" veya "Rotten" bulunan, çıkarılması gereken maddeleri tespit edin.
Tüketime uygun olan maddeleri içeren yeni listeler oluşturmanız gerekiyor. Bunu elle yapabilirsiniz, ancak bir süre alır ve oldukça karmaşık hale gelebilir. Bunu daha etkili bir şekilde başarmak için, bir listedeki elemanlardan yeni bir liste oluşturabilirsiniz; bu işleme Liste Kavraması (List Comprehension) denir.
Üç (3) liste sabitinden: left_sack, middle_sack, right_sack olmak üzere, keselerde istenmeyen elemanlar bulunmayan, potatoes, onions ve garlic adlı üç yeni liste oluşturun. Liste Kavramaları, bütün fazla kod yazmadan yeni listeler oluşturmanızı sağlar, örneğin:
# Original list sack = ["Potatoes", "Sweet Potatoes", "Spoiled Potatoes" ] # List Comprehension potatoes = [x for x in sack if not "Spoiled" in x] # Bu, 'potatoes' adında ve şu elemanları içeren bir liste oluşturacaktır: # ["Potatoes", "Sweet Potatoes"]
Yukarıdaki örnekte, potatoes adlı liste, sadece ["Potatoes", "Sweet Potatoes"] öğelerini içerecek şekilde sack listesinden oluşturulmuş ve "Spoiled Potatoes" öğesi hariç tutulmuştur. Bu, listedeki her elemanı geçmek için x kullanarak oluşturulan kendi kendine yeten bir for döngüsü ve istenmeyen öğeyi, yani içinde "Spoiled" kelimesi bulunan herhangi bir dizeyi tespit edip hariç tutmak için for / in ifadeleri kullanılarak sağlanmıştır.
Özetle; liste sabitlerinde "Bad", "Spoiled" veya "Rotten" kelimelerinin olup olmadığını speak() fonksiyonunu kullanarak kontrol edin, Liste Kavramaları kullanarak potatoes, onions ve garlic listelerini oluşturun ve her listede tespit ettiğiniz istenmeyen öğeleri çıkarın.
Bu listeler oluşturulduktan sonra, sebze işaretli sandıkların önündeki üç (3) altın X işaretine gidin ve place() fonksiyonunu kullanarak listeleri, seviyeyi tamamlamak için ilgili sandıklara yerleştirin. Konumlar işaretlerde belirtilmiştir; bunlar sırasıyla sol sandıktaki onions, orta sandıktaki potatoes ve sol sandıktaki garlic'dir.