Teşekkürler Ökkeş bey. Verdiğiniz bağlantıdaki
def your_function(list_of_strings):
encountered_strings = {}
result = []
idx = 0
for astring in list_of_strings:
if astring in encountered_strings: # check if you already seen this string
result.append(encountered_strings[astring])
else:
encountered_strings[astring] = idx
result.append(idx)
idx += 1
return result
çözümü tam olarak aradığım şeydi. Çözümde, dizedeki farklı harfleri anahtar kabul eden bir sözlük-dictionary (sözlükler, özel bir tür küme yapısıdır) tanımlanıyor, bu anahtarlara $0, 1, 2, \dots$ gibi sayılar karşılık getiriliyor. Bunlar bizim indekslerimiz oluyor. "result" isimli liste yapısı ise dizedeki harflerin indekslerini üretiyor.
Bu kod parçacığı ile aşağı yukarı aynı görevi yapan ve bizim için kolaylık olsun diye hazırlanmış dize.index() fonksiyonunu neden tercih etmediğimi sohbet ederek açayım. Bazı görevlerde, örneğin bir sınavda ya da bir iş mülakatında code challenge diye tabir edilen aşamalar olabiliyor. Burada sınavı/mülakatı yapan kişiler genelde sizden bir library'den özel bir fonksiyon import etme (çağırma, ithal etme) işlemi yapmadan temel kodları kullanarak problemi çözmenizi bekliyor. Ya da temel kodlardan bazılarının kullanımı yasaklanıyor ve sizden görevi bu şekilde tamamlananız isteniyor. "İndex fonksiyonunu kullanmadan kod yazın" gibi bir kısıtlama gelmesi zordur diye tahmin ediyorum. Çünkü index fonksiyonu, append fonksiyonu, list, ... bunlar çok temel fonksiyonlar.
Zorluk ve uzunluk olarak yukarıdakine denk bir kodlama problemi, kodlama gerektiren bir sektörde başvurulan pozisyona göre code challenge için uygun bir düzeyde olabilir. Örneğin; senior düzey veri bilimcisi pozisyonu için bu düzeyde soru tercih edilebilirken, senior düzey python engineer posizyonu için hafif olabilir, belki entry düzey engineer için bile hafif olabilir. (Bilgisayar mühendislerinin veya sektörden kişilerin problemin zorluk düzeyi seçimini yorumlaması daha sağlıklı olur. Nette denk geldiğim birkaç code challenge sorusu oldu ama ilgili arkadaşları yanlış yönlendirmek istemem. Merak edenlerin, bu tür soruların/deneyimlerin paylaşıldığı sitelerde zaman harcamasını tavsiye edebilirim.)
İşi aldık diyelim, kullanacağımız bir library'yi baştan kodlayacak değiliz. En hızlı şekilde işleri teslim etmeye bakarız, işverenin beklentisi de öyle olur. Sanırım code challenge aşamasındaki önemli bir amaç şudur: umulmadık bir problem çıktığı zaman kişi yaratıcı çözümler geliştirebiliyor mu? Çözümünü internette bulamadığı/internete sormasının da pek uygun olmayacağı bir sorunla karşılaştığında, kişi kendi kodlarını yazarak o sorunu aşabilecek dirençte midir?
İndeks fonksiyonu sorusu nereden aklıma geldi, onu da paylaşayım. codewars isimli sitede kyu 6-düzey bir problemi çözüyordum. (Kyu 8 en kolay, kyu 1 düzey en zor olarak sıralanmıştır.) İndeks fonksiyonu yazarsam soruyu çözebileceğimi farkettim. İndeks fonksiyonunu tam olarak yazamasam da sitenin tüm testlerinden geçecek brutal bir başka kod dizisi yazıp görevi tamamladım. Kimi kurumlar, code challenge için bu tür kod problemleri sunan (yine hackerrank gibi) sitelerin sorularından faydalanmayı, onları modifiye etmeyi tercih edebiliyor. Bu bakımdan, meraklıları veya Python kodlama becerilerini iş hayatında kullanacak kişiler de bu tür sitelerdeki problemlerle vakit geçiriyor.
Benim uğraştığım kyu 6-düzey soruyu da bir başka başlıkta paylaşırım. (... ve iki-kelimenin-izomorf-olup-olmadigini-kontrol-python-programi başlığında paylaştım.)