<jupyter_start><jupyter_text>Array (Dizi) Yapısı  İçerik* [Arrays](1)* [Dynamic Array](2)* [Dynamic Array with Python](3)* [Array İş Mülakatları Soru-Cevap](4)* [Array Python Challenge/Problem](5)* [Neler Öğrendik](6)  Arrays* 1 mesafe sensörü düşünün. Saniye de 1 veri yollayan bir sensör.* Bu verileri depolamak için variable tanımlayabilir miyiz?* Peki variable yerine ne kullanabiliriz? ARRAYS* Value depolamamıza yarayan yapılara array diyoruz.* Örn: [1,2,3,4,5] = higher level abstraction yani real world'de böyle kullanılır.* Bu array 5 elemanlı bir array.* Arrayin içinde ki her bir elemanın yerini indexler belirler.* 2 sayısı yani değeri index 1 dedir.* Biz tüm bu kursumuzda python kullandığımız gibi data structure konusunda da python kullanacağız ve python da index sıfırdan başlar.<jupyter_code>import numpy as np
array = np.array([[1,2,3,4,5]])  # vector 1D
print(array)
print("Boyut: ",array.shape)<jupyter_output>[[1 2 3 4 5]]
Boyut:  (1, 5)<jupyter_text>* Peki array tek boyulu olmak zorunda mı? Hayır 2 boyutlu hatta 3-4 boyutlu bile olabilir. (Optional: tensor is lower or higher dimensinal array)* 2D array satır ve sütunlardan oluşur. Row - Column<jupyter_code>array2D = np.array([[1,2,3,4,5],
                    [6,7,8,9,10]])
print(array2D)
print("boyut: ",array2D.shape)
print("2. satır 4. sütun: ",array2D[1,3])<jupyter_output>[[ 1  2  3  4  5]
 [ 6  7  8  9 10]]
boyut:  (2, 5)
2. satır 4. sütun:  9<jupyter_text>Dynamic Array* Dynamic array boyutunu önceden belirtmek zorunda olmadığımız daha sonra eleman ekleyip çıkartabileceğimiz yapılara denir.* Dynamic array growable and resizable olarak tanımlanır.* Dynamic array neredeyse tüm programlama dillerinde çok sık kullanılan bir yapıdır.* ![title](dynamicAr.jpg)  Dynamic Array with Python* Anlamak için kendi dynamic array class'ımızı yaratacağız.* Eğer class ile ilgili sorunlarız var ise bu linkte ki benim dersimin object oriented kısmından öğrenebilirsiniz:    * https://www.udemy.com/python-sfrdan-uzmanlga-programlama-1/<jupyter_code>import ctypes # yeni array yaratmak icin kullanacagiz

class DynamicArray(object):
    
    # initialize (constructor)
    def __init__(self):
        self.n = 0 # eleman sayisi
        self.capacity = 1 # kapasite
        self.A = self.make_array(self.capacity) 
        
    def __len__(self):
        """
        return array icerisinde eleman sayisi
        """
        return self.n
    
    def __getitem__(self,k):
        """
        return index k'da ki eleman(value)
        """
        if not 0 <= k < self.n:
            return IndexError("k is out of bounds !")
        
        return self.A[k]
        
    def append(self,eleman):
        """
        array'e eleman ekler
        """
        
        # eger kapasite dolu ise kapasiteyi iki katina cikar
        if self.n == self.capacity:
            self._resize(2*self.capacity)
            
        self.A[self.n] = eleman # eleman ekleme
        self.n += 1 # eleman sayisi bir arttir
        
    def _resize(self,new_cap):
        """
        array kapasitesini arttir
        """
        
        B = self.make_array(new_cap)  # yeni array yap
        
        # eski array (A) icerisindeki degerleri yeni arraye(B) icine tasi
        for k in range(self.n):
            B[k] = self.A[k]
        
        self.A = B # arrayi guncelle
        self.capacity = new_cap # kapasite guncelle
    
    def make_array(self,new_cap):
        """
        return yeni array
        """
        return (new_cap*ctypes.py_object)()
    
# obje tanimla
arr = DynamicArray()
# append new element 1
arr.append(1)
print(arr[0])
# append new element 1 , 3
arr.append(3)
print(arr[0],arr[1])
# append new element 1 , 3 ,5
arr.append(5)
print(arr[0],arr[1],arr[2])<jupyter_output>1
1 3
1 3 5<jupyter_text>Array İş Mülakatları Soru-Cevap 1. Dynamic Array neden önemli?    * Automatic resizing2. Array ile Dynamic Array arasındaki fark nedir?    * Array is fixed size. Başlangıçta yani array yaratırken size belirlemek lazım    * Dynamic array de başlangıçta size belirlemeye gerek yok3. Dynamic Array Advantages and Disadvantages ?     * Advantages:        * Fast lookups: istenilen arrayde ki degeri elde etmesi          * Variable size: resizeable     * Disadvantages:        * Slow worst-case appends: eger yer yoksa kapasiteyi arttırmak lazım ama yavas.        * Costly inserts and deletes    * ![title](array big o.jpg)4. Size Nasıl Artıyor?    * 2 katına çıkıyor5. Which of the following operations is not O(1) for an array of sorted data. You may assume that array elements are distinct.    * (A) Find the ith largest element    * (B) Delete an element    * (C) Find the ith smallest element    * (D) All of the above    * (B)  Array Python Challenge/Problem* Brute force çözmeye çalışın yani kağıt kalem düz mantık for döngüleri filan kullanara, metot kullanmadan.* Eğer soruyu çözemezseniz bırakın 1 gün sonra tekrar bakın* Array Python Challenges/Problems    1. Word Split  1) Word Split    * input = ["deeplearning", "d,dll,a,deep,dee,base,lear,learning"]    * output = ["deep,learning"]<jupyter_code>def wordSplit(liste):
    word = list((liste[0]))  # "deeplearning" => ["d","e"...]
    d = liste[1].split(",")  # ["d","dll","a","deep","dee","base","lear","learning"]
    
    for i in range(1,len(word)):
        c = word[:]
        c.insert(i," ")
        
        x , y = "".join(c).split()   # "d", "eeplearning"    "de","eplearning"
        if x in d and y in d:
            return x + " , "+ y
    return "bulamadim (no way)"
print(wordSplit(["deeplearning", "d,dll,a,deep,dee,base,lear,learning"]))
print(wordSplit(["deeplear2ning", "d,dll,a,deep,dee,base,lear,learning"]))
print(wordSplit(["deeplear2ning", "d,dll,a,deep,dee,base,lear,lear2ning"]))<jupyter_output>deep , learning
bulamadim (no way)
deep , lear2ning
{'fraction_non_alphanumeric': 0.11065221132335226, 'fraction_numerical': 0.019273791085871624, 'mean_word_length': 3.196389891696751, 'pattern_counts': {'":': 0, '<': 15, '<?xml version=': 0, '>': 14, 'https://': 1, 'lorem ipsum': 0, 'www.': 1, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '4', 'dir': 'jupyter-structured-clean-dedup', 'id': '513062', 'license': 'MIT', 'n_tokens_mistral': 2258, 'n_tokens_neox': 2124, 'n_words': 598, 'path': 'Data Structures/Arrays/Array (Dizi) Yapısı.ipynb', 'repo_name': 'bulentsiyah/Python-Basics-Algorithms-Data-Structures-Object-Oriented-Programming-Job-Interview-Questions', 'size': '5811'}