{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Fundamental Data Structure :\n",
    "\n",
    "The fundamental data structure in python includes \n",
    "\n",
    "- **Primitive type** ( ***Integer, Float, String***, and ***Boolean***) and \n",
    "- **Non-Primitive type** ( ***Array, List, Tuples, Dictionary, Set***, and ***File***) \n",
    "\n",
    "In this tutorial, we are going to discudd about List, Tuples, Set and Dictionary. \n",
    "\n",
    "\n",
    "\n",
    "### List\n",
    "\n",
    "List is built in data structure in python. It is \n",
    "- Mutable i.e., we can change or edite the size of the list by appending, inserting and deleting the elements.\n",
    "- List can hold heterogeneous objects (e.g., integer, string, boolean)\n",
    "\n",
    "Lets try to understand the List:"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- To initiate a blank List."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {},
   "outputs": [],
   "source": [
    "l = []"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- To find the type of the object."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "list"
      ]
     },
     "execution_count": 63,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "type(l)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- To create a list from scratch."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 97,
   "metadata": {},
   "outputs": [],
   "source": [
    "L = [1,2,3,4,5,6,342,34]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 98,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[1, 2, 3, 4, 5, 6, 342, 34]"
      ]
     },
     "execution_count": 98,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "L"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- Indexing of list."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(1, 2, 6)"
      ]
     },
     "execution_count": 66,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "L[0],L[1],L[5]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- Revers indexing is also possible."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(6, 5, 4)"
      ]
     },
     "execution_count": 67,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "L[-1],L[-2],L[-3]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- To find the length of list."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "6"
      ]
     },
     "execution_count": 68,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(L)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- To add the element from last."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[1, 2, 3, 4, 5, 6, 12]"
      ]
     },
     "execution_count": 69,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "L.append(12)\n",
    "L"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- To find the sum of the elements (if they are of same types like int. double etc)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "33"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sum(L)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- To find maximum and minimum of the list"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(12, 1)"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "max(L), min(L)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- To create a list of heterogeneous element types."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "L = [1,2.0,3,4,5,\"Apple\",True, False]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- To find the type of elements of a list."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(float, str)"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "type(L[1]),type(L[5])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- To create a list of list."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 71,
   "metadata": {},
   "outputs": [],
   "source": [
    "L = [[1,2,3],[3,4,5],[5,7,9]]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- To find list inside a list."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[1, 2, 3]"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "L[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "L[0][1]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- To add two list. It is not as ususal addition. The elements are accumulated."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "([1, 2, 3, 2, 4, 6], {1, 2, 3, 4, 6})"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "L1 = [1,2,3] ; L2 = [2,4,6]\n",
    "L1+L2, set(L1+L2)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- To add element from end of the list"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[1, 4, 2, 3, 5, 6, 7, 100]"
      ]
     },
     "execution_count": 72,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "L = [1,4,2,3,5,6,7]\n",
    "L.append(100)\n",
    "L"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- To insert element (100) at specific index (1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[1, 100, 4, 2, 3, 5, 6, 7]"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "L = [1,4,2,3,5,6,7]\n",
    "L.insert(1,100)\n",
    "L"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- To remove specific element form list. It will remove the first occurance."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[1, 2, 3, 5, 6, 7, 4]"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "L = [1,4,2,3,5,6,7,4]\n",
    "L.remove(4)\n",
    "L"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- To remove the element from specific index"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[1, 4, 2, 3, 5, 6]"
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "L = [1,4,2,3,5,6,7]\n",
    "L.pop(-1)\n",
    "L"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- To sort the list"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[1, 2, 5, 7, 10, 30, 60]"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "L = [1,10,2,30,5,60,7]\n",
    "L.sort()\n",
    "L"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- To reverse the list"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[7, 6, 5, 3, 2, 4, 1]"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "L = [1,4,2,3,5,6,7]\n",
    "L.reverse()\n",
    "L"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- List comprehension"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]\n"
     ]
    }
   ],
   "source": [
    "L = [x for x in range(100)]\n",
    "print(L)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 75,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98]\n"
     ]
    }
   ],
   "source": [
    "L = [x for x in range(100) if x%2==0]\n",
    "print(L)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 79,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "59"
      ]
     },
     "execution_count": 79,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import random as rn\n",
    "rn.randint(0,100)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 83,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[89, 28, 17, 21, 30, 12, 2, 18, 44, 35, 39, 34, 36, 15, 62, 31, 29, 67, 89, 84, 52, 99, 12, 2, 65, 93, 37, 60, 65, 65, 67, 65, 83, 96, 6, 16, 96, 38, 43, 28, 38, 4, 60, 48, 5, 50, 82, 27, 75, 94, 3, 11, 55, 87, 56, 48, 71, 40, 7, 20, 45, 29, 100, 4, 23, 86, 0, 46, 69, 60, 85, 27, 45, 93, 6, 68, 13, 66, 89, 59, 46, 89, 41, 84, 69, 11, 22, 38, 24, 74, 82, 6, 12, 84, 14, 68, 16, 2, 91, 62, 57, 72, 98, 4, 98, 64, 72, 57, 73, 12, 78, 40, 0, 10, 36, 52, 71, 42, 27, 94, 32, 82, 22, 89, 37, 26, 55, 80, 49, 48, 69, 34, 48, 97, 39, 82, 78, 97, 11, 38, 77, 62, 55, 95, 52, 42, 61, 94, 100, 86, 28, 41, 75, 13, 40, 22, 7, 78, 2, 51, 84, 30, 45, 39, 54, 72, 88, 48, 10, 78, 9, 44, 18, 36, 23, 83, 1, 88, 37, 87, 85, 4, 65, 55, 11, 97, 90, 77, 1, 41, 75, 37, 43, 3, 45, 38, 4, 16, 87, 47]\n"
     ]
    }
   ],
   "source": [
    "import random as rn\n",
    "R = [rn.randint(0,100) for k in range(200)]\n",
    "print(R)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Counter({37: 5, 17: 5, 67: 5, 15: 4, 99: 4, 88: 4, 61: 4, 54: 4, 96: 4, 80: 4, 51: 4, 83: 4, 14: 4, 10: 3, 78: 3, 27: 3, 49: 3, 62: 3, 38: 3, 48: 3, 94: 3, 66: 3, 81: 3, 72: 3, 95: 3, 1: 3, 21: 3, 100: 3, 40: 3, 28: 3, 43: 3, 29: 2, 16: 2, 7: 2, 74: 2, 60: 2, 64: 2, 85: 2, 50: 2, 39: 2, 44: 2, 8: 2, 90: 2, 58: 2, 0: 2, 79: 2, 24: 2, 98: 2, 93: 2, 22: 2, 68: 2, 42: 2, 86: 2, 30: 2, 41: 2, 77: 2, 59: 2, 34: 2, 4: 2, 31: 2, 57: 2, 6: 2, 73: 2, 45: 1, 69: 1, 91: 1, 71: 1, 75: 1, 87: 1, 70: 1, 47: 1, 82: 1, 18: 1, 9: 1, 26: 1, 55: 1, 56: 1, 23: 1, 52: 1, 33: 1, 13: 1, 2: 1, 46: 1, 36: 1, 53: 1, 92: 1, 84: 1, 12: 1, 20: 1, 5: 1})\n"
     ]
    }
   ],
   "source": [
    "import collections\n",
    "#High Performance Counting\n",
    "C = collections.Counter(R)\n",
    "print(C)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 84,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['A', 'T', 'C', 'T', 'T', 'C', 'A', 'C', 'G', 'G', 'A', 'T', 'G', 'G', 'C', 'T', 'G', 'C', 'A', 'T', 'A', 'T', 'T', 'G', 'G', 'G', 'A', 'C', 'G', 'G', 'C', 'C', 'A', 'T', 'A', 'A', 'G', 'G', 'G', 'A', 'A', 'G', 'C', 'C', 'A', 'A', 'C', 'G', 'C', 'G', 'T', 'A', 'A', 'A', 'G', 'G', 'T', 'T', 'A', 'G', 'T', 'T', 'G', 'A', 'C', 'G', 'C', 'C', 'G', 'T', 'C', 'T', 'A', 'C', 'G', 'G', 'G', 'T', 'G', 'A', 'A', 'G', 'C', 'T', 'T', 'C', 'C', 'A', 'A', 'G', 'A', 'C', 'G', 'C', 'T', 'T', 'T', 'T', 'A', 'A', 'T', 'C', 'C', 'T', 'G', 'A', 'C', 'G', 'C', 'A', 'G', 'A', 'C', 'C', 'C', 'A', 'G', 'T', 'A', 'G', 'C', 'A', 'G', 'C', 'G', 'G', 'G', 'T', 'T', 'T', 'A', 'A', 'C', 'T', 'G', 'A', 'T', 'A', 'G', 'G', 'G', 'C', 'G', 'T', 'C', 'C', 'T', 'G', 'G', 'C', 'G', 'A', 'G', 'C', 'C', 'A', 'T', 'A', 'T', 'T', 'C', 'A', 'C', 'T', 'G', 'T', 'G', 'T', 'T', 'T', 'C', 'T', 'G', 'C', 'A', 'G', 'G', 'C', 'T', 'T', 'C', 'G', 'C', 'T', 'C', 'G', 'A', 'G', 'T', 'G', 'A', 'C', 'C', 'T', 'A', 'G', 'C', 'T', 'T', 'T']\n"
     ]
    }
   ],
   "source": [
    "R = [rn.choice(['A','T','G','C']) for i in range(200)]\n",
    "print(R)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 85,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'ATCTTCACGGATGGCTGCATATTGGGACGGCCATAAGGGAAGCCAACGCGTAAAGGTTAGTTGACGCCGTCTACGGGTGAAGCTTCCAAGACGCTTTTAATCCTGACGCAGACCCAGTAGCAGCGGGTTTAACTGATAGGGCGTCCTGGCGAGCCATATTCACTGTGTTTCTGCAGGCTTCGCTCGAGTGACCTAGCTTT'"
      ]
     },
     "execution_count": 85,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "DNA = ''.join(R)\n",
    "DNA"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 86,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(44, 9, 1)"
      ]
     },
     "execution_count": 86,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "DNA.count('A'), DNA.count('AT'), DNA.count('ATG')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Mini  Assignment:\n",
    "Create a DNA string of 10,000 characters and count the following: A,T,G,C,all combination of two charaters, all combinations of three characters."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Tuples\n",
    "\n",
    "Tuples are non-mutable, which means we can ot add or remove elements once tuple is defind."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- To define a tuples from scratch"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 87,
   "metadata": {},
   "outputs": [],
   "source": [
    "t = (2,3,4,5)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- Find type"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 88,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tuple"
      ]
     },
     "execution_count": 88,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "type(t)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- Indexing"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "3"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "t[1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "L = [(1,2),(2,3),(3,4)]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "L[0][0]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- Create a list of tuples"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[(1, 2), ('a', 'b'), (True, False)]"
      ]
     },
     "execution_count": 46,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "L = [(1,2),(\"a\",\"b\"),(True, False)]\n",
    "L"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Dictionary\n",
    "\n",
    "Dictionary organizes the data with key-value pair. Dictionary can be nested with other data types."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- To initiate a dictionary"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [],
   "source": [
    "D = dict()\n",
    "DD = {}"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- Create a dictionary from scratch"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 89,
   "metadata": {},
   "outputs": [],
   "source": [
    "D = {\"fruit\":'apple',\n",
    "    \"vegetable\" : 'carrot',\n",
    "    \"rice\": 2.0,\n",
    "    'milk': 10,}"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- What are keys?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 90,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "dict_keys(['fruit', 'vegetable', 'rice', 'milk'])"
      ]
     },
     "execution_count": 90,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "D.keys()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- What are values?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 91,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "dict_values(['apple', 'carrot', 2.0, 10])"
      ]
     },
     "execution_count": 91,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "D.values()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- Indexing"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "('apple', 2.0)"
      ]
     },
     "execution_count": 42,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "D['fruit'], D[\"rice\"]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- Iteration over key and values"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "fruit apple\n",
      "vegetable carrot\n",
      "rice 2.0\n",
      "milk 10\n"
     ]
    }
   ],
   "source": [
    "for key,value in D.items():\n",
    "    print(key,value)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- To update a dictionary"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'fruit': 'apple', 'vegetable': 'carrot', 'rice': 2.0, 'milk': 10, 'salt': 2.0}"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "D.update({\"salt\": 2.0})\n",
    "D"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- To create a list form a Dictionary. Only keys are collected."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['fruit', 'vegetable', 'rice', 'milk']"
      ]
     },
     "execution_count": 43,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "list(D)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- To create a list of keys only"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['fruit', 'vegetable', 'rice', 'milk']"
      ]
     },
     "execution_count": 44,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "list(D.keys())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- To create a list of values"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['apple', 'carrot', 2.0, 10, 2.0]"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "list(D.values())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- To create Dictionary of with list, tuples and dictionary"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'names': ['John', 'Harry', 'Brat'],\n",
       " 'roll no': (1, 2, 3),\n",
       " 'plan': {'first': [12, 34, 56], 'second': [1, 3, 5]}}"
      ]
     },
     "execution_count": 48,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "DD = {\"names\":(\"John\",\"Harry\", \"Brat\"),\\\n",
    "      \"roll no\": [1,2,3],\\\n",
    "      \"plan\":{\"first\":[12,34,56],\"second\":[1,3,5]}}\n",
    "\n",
    "DD"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 92,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0.  0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.  1.1 1.2 1.3 1.4 1.5 1.6 1.7\n",
      " 1.8 1.9 2.  2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 3.  3.1]\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "X = np.arange(0,np.pi,0.1)\n",
    "print(X)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 93,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "X = np.arange(0,np.pi,0.1)\n",
    "M = {\"sin\": [np.sin(x) for x in X],\\\n",
    "     \"cos\": [np.cos(x) for x in X],\\\n",
    "     \"plo\":[(x*x+x+1) for x in X],\\\n",
    "     \"trig\": [np.cos(x) + np.sin(x) for x in X]}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 94,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'sin': [0.0, 0.09983341664682815, 0.19866933079506122, 0.2955202066613396, 0.3894183423086505, 0.479425538604203, 0.5646424733950355, 0.6442176872376911, 0.7173560908995228, 0.7833269096274834, 0.8414709848078965, 0.8912073600614354, 0.9320390859672264, 0.963558185417193, 0.9854497299884603, 0.9974949866040544, 0.9995736030415051, 0.9916648104524686, 0.9738476308781951, 0.9463000876874145, 0.9092974268256817, 0.8632093666488737, 0.8084964038195901, 0.74570521217672, 0.6754631805511506, 0.5984721441039564, 0.5155013718214642, 0.4273798802338298, 0.33498815015590466, 0.23924932921398198, 0.1411200080598672, 0.04158066243329049], 'cos': [1.0, 0.9950041652780258, 0.9800665778412416, 0.955336489125606, 0.9210609940028851, 0.8775825618903728, 0.8253356149096782, 0.7648421872844884, 0.6967067093471654, 0.6216099682706644, 0.5403023058681398, 0.4535961214255773, 0.3623577544766734, 0.26749882862458735, 0.16996714290024081, 0.0707372016677029, -0.029199522301288815, -0.12884449429552486, -0.2272020946930871, -0.3232895668635036, -0.4161468365471424, -0.5048461045998576, -0.5885011172553458, -0.6662760212798244, -0.7373937155412458, -0.8011436155469337, -0.8568887533689473, -0.9040721420170612, -0.9422223406686583, -0.9709581651495907, -0.9899924966004454, -0.9991351502732795], 'plo': [1.0, 1.11, 1.24, 1.3900000000000001, 1.56, 1.75, 1.9600000000000002, 2.1900000000000004, 2.4400000000000004, 2.71, 3.0, 3.3100000000000005, 3.6400000000000006, 3.99, 4.36, 4.75, 5.16, 5.590000000000001, 6.04, 6.510000000000001, 7.0, 7.51, 8.040000000000001, 8.590000000000002, 9.160000000000002, 9.75, 10.360000000000001, 10.990000000000002, 11.640000000000002, 12.310000000000002, 13.0, 13.71], 'trig': [1.0, 1.094837581924854, 1.1787359086363027, 1.2508566957869456, 1.3104793363115357, 1.3570081004945758, 1.3899780883047137, 1.4090598745221796, 1.4140628002466882, 1.4049368778981477, 1.3817732906760363, 1.3448034814870127, 1.2943968404438997, 1.2310570140417803, 1.155416872888701, 1.0682321882717574, 0.9703740807402162, 0.8628203161569437, 0.7466455361851081, 0.623010520823911, 0.4931505902785393, 0.35836326204901614, 0.21999528656424427, 0.0794291908968956, -0.061930534990095154, -0.20267147144297726, -0.34138738154748316, -0.47669226178323143, -0.6072341905127536, -0.7317088359356086, -0.8488724885405782, -0.957554487839989]}\n"
     ]
    }
   ],
   "source": [
    "print(M)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 95,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>sin</th>\n",
       "      <th>cos</th>\n",
       "      <th>plo</th>\n",
       "      <th>trig</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.00</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.099833</td>\n",
       "      <td>0.995004</td>\n",
       "      <td>1.11</td>\n",
       "      <td>1.094838</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.198669</td>\n",
       "      <td>0.980067</td>\n",
       "      <td>1.24</td>\n",
       "      <td>1.178736</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.295520</td>\n",
       "      <td>0.955336</td>\n",
       "      <td>1.39</td>\n",
       "      <td>1.250857</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.389418</td>\n",
       "      <td>0.921061</td>\n",
       "      <td>1.56</td>\n",
       "      <td>1.310479</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>0.479426</td>\n",
       "      <td>0.877583</td>\n",
       "      <td>1.75</td>\n",
       "      <td>1.357008</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>0.564642</td>\n",
       "      <td>0.825336</td>\n",
       "      <td>1.96</td>\n",
       "      <td>1.389978</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>0.644218</td>\n",
       "      <td>0.764842</td>\n",
       "      <td>2.19</td>\n",
       "      <td>1.409060</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>0.717356</td>\n",
       "      <td>0.696707</td>\n",
       "      <td>2.44</td>\n",
       "      <td>1.414063</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>0.783327</td>\n",
       "      <td>0.621610</td>\n",
       "      <td>2.71</td>\n",
       "      <td>1.404937</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>0.841471</td>\n",
       "      <td>0.540302</td>\n",
       "      <td>3.00</td>\n",
       "      <td>1.381773</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>0.891207</td>\n",
       "      <td>0.453596</td>\n",
       "      <td>3.31</td>\n",
       "      <td>1.344803</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>0.932039</td>\n",
       "      <td>0.362358</td>\n",
       "      <td>3.64</td>\n",
       "      <td>1.294397</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>0.963558</td>\n",
       "      <td>0.267499</td>\n",
       "      <td>3.99</td>\n",
       "      <td>1.231057</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>0.985450</td>\n",
       "      <td>0.169967</td>\n",
       "      <td>4.36</td>\n",
       "      <td>1.155417</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>0.997495</td>\n",
       "      <td>0.070737</td>\n",
       "      <td>4.75</td>\n",
       "      <td>1.068232</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>0.999574</td>\n",
       "      <td>-0.029200</td>\n",
       "      <td>5.16</td>\n",
       "      <td>0.970374</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>0.991665</td>\n",
       "      <td>-0.128844</td>\n",
       "      <td>5.59</td>\n",
       "      <td>0.862820</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>0.973848</td>\n",
       "      <td>-0.227202</td>\n",
       "      <td>6.04</td>\n",
       "      <td>0.746646</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>0.946300</td>\n",
       "      <td>-0.323290</td>\n",
       "      <td>6.51</td>\n",
       "      <td>0.623011</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20</th>\n",
       "      <td>0.909297</td>\n",
       "      <td>-0.416147</td>\n",
       "      <td>7.00</td>\n",
       "      <td>0.493151</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>21</th>\n",
       "      <td>0.863209</td>\n",
       "      <td>-0.504846</td>\n",
       "      <td>7.51</td>\n",
       "      <td>0.358363</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>22</th>\n",
       "      <td>0.808496</td>\n",
       "      <td>-0.588501</td>\n",
       "      <td>8.04</td>\n",
       "      <td>0.219995</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23</th>\n",
       "      <td>0.745705</td>\n",
       "      <td>-0.666276</td>\n",
       "      <td>8.59</td>\n",
       "      <td>0.079429</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>24</th>\n",
       "      <td>0.675463</td>\n",
       "      <td>-0.737394</td>\n",
       "      <td>9.16</td>\n",
       "      <td>-0.061931</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25</th>\n",
       "      <td>0.598472</td>\n",
       "      <td>-0.801144</td>\n",
       "      <td>9.75</td>\n",
       "      <td>-0.202671</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>26</th>\n",
       "      <td>0.515501</td>\n",
       "      <td>-0.856889</td>\n",
       "      <td>10.36</td>\n",
       "      <td>-0.341387</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>27</th>\n",
       "      <td>0.427380</td>\n",
       "      <td>-0.904072</td>\n",
       "      <td>10.99</td>\n",
       "      <td>-0.476692</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>28</th>\n",
       "      <td>0.334988</td>\n",
       "      <td>-0.942222</td>\n",
       "      <td>11.64</td>\n",
       "      <td>-0.607234</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>29</th>\n",
       "      <td>0.239249</td>\n",
       "      <td>-0.970958</td>\n",
       "      <td>12.31</td>\n",
       "      <td>-0.731709</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>30</th>\n",
       "      <td>0.141120</td>\n",
       "      <td>-0.989992</td>\n",
       "      <td>13.00</td>\n",
       "      <td>-0.848872</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>31</th>\n",
       "      <td>0.041581</td>\n",
       "      <td>-0.999135</td>\n",
       "      <td>13.71</td>\n",
       "      <td>-0.957554</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "         sin       cos    plo      trig\n",
       "0   0.000000  1.000000   1.00  1.000000\n",
       "1   0.099833  0.995004   1.11  1.094838\n",
       "2   0.198669  0.980067   1.24  1.178736\n",
       "3   0.295520  0.955336   1.39  1.250857\n",
       "4   0.389418  0.921061   1.56  1.310479\n",
       "5   0.479426  0.877583   1.75  1.357008\n",
       "6   0.564642  0.825336   1.96  1.389978\n",
       "7   0.644218  0.764842   2.19  1.409060\n",
       "8   0.717356  0.696707   2.44  1.414063\n",
       "9   0.783327  0.621610   2.71  1.404937\n",
       "10  0.841471  0.540302   3.00  1.381773\n",
       "11  0.891207  0.453596   3.31  1.344803\n",
       "12  0.932039  0.362358   3.64  1.294397\n",
       "13  0.963558  0.267499   3.99  1.231057\n",
       "14  0.985450  0.169967   4.36  1.155417\n",
       "15  0.997495  0.070737   4.75  1.068232\n",
       "16  0.999574 -0.029200   5.16  0.970374\n",
       "17  0.991665 -0.128844   5.59  0.862820\n",
       "18  0.973848 -0.227202   6.04  0.746646\n",
       "19  0.946300 -0.323290   6.51  0.623011\n",
       "20  0.909297 -0.416147   7.00  0.493151\n",
       "21  0.863209 -0.504846   7.51  0.358363\n",
       "22  0.808496 -0.588501   8.04  0.219995\n",
       "23  0.745705 -0.666276   8.59  0.079429\n",
       "24  0.675463 -0.737394   9.16 -0.061931\n",
       "25  0.598472 -0.801144   9.75 -0.202671\n",
       "26  0.515501 -0.856889  10.36 -0.341387\n",
       "27  0.427380 -0.904072  10.99 -0.476692\n",
       "28  0.334988 -0.942222  11.64 -0.607234\n",
       "29  0.239249 -0.970958  12.31 -0.731709\n",
       "30  0.141120 -0.989992  13.00 -0.848872\n",
       "31  0.041581 -0.999135  13.71 -0.957554"
      ]
     },
     "execution_count": 95,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import pandas as pd\n",
    "DF = pd.DataFrame(M)\n",
    "DF"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 96,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x211d87c8668>"
      ]
     },
     "execution_count": 96,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "%matplotlib inline\n",
    "DF.plot()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### References:\n",
    "1. https://docs.python.org/3/tutorial/index.html"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}