<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: S.Busienei</title>
    <description>The latest articles on DEV Community by S.Busienei (@sbusienei).</description>
    <link>https://dev.to/sbusienei</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F795707%2Fcf91790b-41a5-4b79-b12a-2e9b44800a39.jpg</url>
      <title>DEV Community: S.Busienei</title>
      <link>https://dev.to/sbusienei</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sbusienei"/>
    <language>en</language>
    <item>
      <title>Hadithi: Speak with your cultural legends e.g. La Llorona and Luanda Magere</title>
      <dc:creator>S.Busienei</dc:creator>
      <pubDate>Sat, 31 Oct 2026 11:09:35 +0000</pubDate>
      <link>https://dev.to/sbusienei/hadithi-speak-with-your-cultural-legends-eg-la-llorona-and-luanda-magere-50ad</link>
      <guid>https://dev.to/sbusienei/hadithi-speak-with-your-cultural-legends-eg-la-llorona-and-luanda-magere-50ad</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the&lt;/em&gt; &lt;a href="https://dev.to/challenges/hacktoberfest-week4-2026-10-26"&gt;&lt;em&gt;Hacktoberfest Open-Source AI Challenge Week 4: Ghost in the Machine&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;In my community, stories have always been passed down through oral narratives. Many would sit by the fire and listen to the stories of old, told from one generation to another. The fire was not only a source of warmth. It became a place where children learned who they were, where elders were heard, and where&lt;br&gt;
people who had lived long before us could still feel close.&lt;/p&gt;

&lt;p&gt;With changing times (and the changing climate) sitting together by the fire has become less attainable. When those moments disappear, we risk losing more than stories. We can lose names, warnings, humour, courage, and the small details that connect us to where we come from.&lt;/p&gt;

&lt;p&gt;I kept wondering: if our gathering places are changing, can we create a new kind of place where these stories can still be encountered?&lt;/p&gt;

&lt;p&gt;That question became &lt;a href="https://hadithi-zciw.onrender.com/portal" rel="noopener noreferrer"&gt;Hadithi, an immersive portal into oral tradition&lt;/a&gt;.&lt;br&gt;
Visitors do not simply read a summary. They enter a legend's landscape, meet a conversational interpretation of its central character, and ask questions using text or their voice.&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://hadithi-zciw.onrender.com/portal" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;hadithi-zciw.onrender.com&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;
The portal now opens onto two complete destinations:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Kenya (Africa)&lt;/strong&gt;, where visitors travel to the Kano Plains and meet a conversational
interpretation of &lt;strong&gt;Luanda Magere&lt;/strong&gt; from Luo oral tradition;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mexico (Latin America)&lt;/strong&gt;, where visitors enter a moonlit river landscape shaped around the regional tellings of &lt;strong&gt;La Llorona&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdllzoxloulhwjcmjgwtn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdllzoxloulhwjcmjgwtn.png" alt=" " width="800" height="539"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The interface labels Luanda as a &lt;strong&gt;conversational interpretation from oral tradition&lt;/strong&gt;. La Llorona is visibly marked as a &lt;strong&gt;research draft requiring cultural review&lt;/strong&gt;, and the experience does not merge. The sources are from approved literal devices (e.g. museum records) and wikipedia as a minor source.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Live demo: &lt;a href="https://hadithi-zciw.onrender.com/" rel="noopener noreferrer"&gt;https://hadithi-zciw.onrender.com/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Video demo: 
  &lt;iframe src="https://www.youtube.com/embed/_mwkVZj3IVQ" width="710" height="399"&gt;
  &lt;/iframe&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/SBusienei" rel="noopener noreferrer"&gt;
        SBusienei
      &lt;/a&gt; / &lt;a href="https://github.com/SBusienei/hadithi" rel="noopener noreferrer"&gt;
        hadithi
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Immersive, source-aware oral traditions portal
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Hadithi&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;Hadithi is an immersive, source-aware oral traditions portal. Its launch
experiences are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Luanda Magere — Kenya, Africa&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;La Llorona — Mexico and Latin America&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Visitors enter a legend's landscape, ask questions by text or microphone, and
see the sources and regional tellings behind each answer.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Experience preview&lt;/h2&gt;
&lt;/div&gt;

&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/SBusienei/hadithi/docs/assets/luanda-magere-character-conversation.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2FSBusienei%2Fhadithi%2FHEAD%2Fdocs%2Fassets%2Fluanda-magere-character-conversation.png" alt="Luanda Magere in the Kano Plains beside the source-grounded conversation panel"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Luanda Magere speaks in the first person from the Kano Plains experience, with
text, microphone and destination controls kept visible.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/SBusienei/hadithi/docs/assets/la-llorona-character-conversation.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2FSBusienei%2Fhadithi%2FHEAD%2Fdocs%2Fassets%2Fla-llorona-character-conversation.png" alt="La Llorona at the moonlit river beside the bilingual source-grounded conversation panel"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;La Llorona appears in the river environment beside the English/Spanish chat
with the cultural-review status visible in the interface.&lt;/em&gt;&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Current prototype&lt;/h2&gt;

&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;Three.js globe journey with labelled Kenya and Mexico destination cards&lt;/li&gt;
&lt;li&gt;User-triggered procedural airship engine, wind, arrival, plains and river audio&lt;/li&gt;
&lt;li&gt;Kano Plains landscape with a licensed, rigged Luanda Magere character
moving sunlight and shadow&lt;/li&gt;
&lt;li&gt;La Llorona moonlit riverbank with water, mist, reeds, procedural ambience,
an animated character, and bilingual source-grounded text conversation&lt;/li&gt;
&lt;li&gt;First-person, source-grounded Luanda Magere conversation in English and Kiswahili&lt;/li&gt;
&lt;li&gt;…&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/SBusienei/hadithi" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;
The main implementation areas are: 

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;app/main.py&lt;/code&gt; — FastAPI routes, grounded generation, schema validation and
deterministic fallbacks;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;app/static/portal.js&lt;/code&gt; — Three.js scene, character interaction, chat,
world destinations, airship transition audio, conversation memory,
microphone recording and Kano Plains ambience;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;app/static/la-llorona-environment.js&lt;/code&gt; — moonlit river, adapted character,
bilingual chat and procedural river ambience;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;app/services/transcription.py&lt;/code&gt; — faster-whisper CPU transcription;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;app/content/luanda_magere.json&lt;/code&gt; — approved narrative passages;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;app/content/luanda_magere_sources.json&lt;/code&gt; — source registry and editorial
safeguards;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;app/content/la_llorona.json&lt;/code&gt; and &lt;code&gt;app/content/la_llorona_sources.json&lt;/code&gt; —
regional narrative pack, source registry and cultural safeguards;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;scripts/adapt_la_llorona_model.py&lt;/code&gt; — reproducible Blender adaptation and
idle-animation export;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;tests/test_app.py&lt;/code&gt; — grounding, fallback, conversation and route tests.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;h3&gt;
  
  
  The immersive portal
&lt;/h3&gt;

&lt;p&gt;The browser begins with a globe suspended in a dark portal. Two readable&lt;br&gt;
destination cards sit below it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Kenya — Luanda Magere&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mexico and Latin America — La Llorona&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Choosing Kenya moves the camera toward the world and reveals the Kano Plains.&lt;br&gt;
Choosing Mexico opens a separate moonlit river environment. Both journeys begin with a short Web Audio transition built from filtered noise and oscillators. It sounds like an airship engine, rising wind and an arrival tone, but no audio file is downloaded and autoplay rules are respected because the sound begins&lt;br&gt;
from the visitor's click.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F73en8td6knmmhjdfqp6i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F73en8td6knmmhjdfqp6i.png" alt=" " width="800" height="349"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Luanda faces the visitor beside a chat surface. The moving sun changes the direction of his shadow, turning a central part of the legend into something the visitor can explore.&lt;/p&gt;

&lt;p&gt;La Llorona stands farther downriver with her &lt;code&gt;Mournful_Idle&lt;/code&gt; animation. Mist, reeds, reflections and restrained moonlight build the atmosphere without turning the experience into a generic horror scene. Her conversation remains text-first because the available synthetic voices did not sound natural enough&lt;br&gt;
for the character.&lt;/p&gt;

&lt;h3&gt;
  
  
  Voice input
&lt;/h3&gt;

&lt;p&gt;Visitors can type a question or record it using &lt;code&gt;MediaRecorder&lt;/code&gt;. FastAPI sends the recording to the open faster-whisper &lt;code&gt;base&lt;/code&gt; model using CPU INT8 inference.&lt;/p&gt;

&lt;p&gt;During local measurement:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the first transcription completed in approximately 8.54 seconds;&lt;/li&gt;
&lt;li&gt;a warm transcription completed in approximately 4.67 seconds.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Natural spoken output is intentionally disabled until a reliable neural text-to-speech provider is available. I preferred readable chat over silently falling back to a robotic browser voice.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Furi291jsubuccklxwu1l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Furi291jsubuccklxwu1l.png" alt=" " width="800" height="350"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Open-model conversation
&lt;/h3&gt;

&lt;p&gt;The live experience currently uses&lt;br&gt;
&lt;code&gt;@cf/meta/llama-3.2-3b-instruct&lt;/code&gt; through Cloudflare Workers AI's&lt;br&gt;
OpenAI-compatible endpoint.&lt;/p&gt;

&lt;p&gt;For each question, Hadithi sends:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;the current question;&lt;/li&gt;
&lt;li&gt;a bounded recent conversation history;&lt;/li&gt;
&lt;li&gt;approved cultural-source passages;&lt;/li&gt;
&lt;li&gt;instructions to preserve uncertainty and oral variants;&lt;/li&gt;
&lt;li&gt;a strict schema for the answer, source IDs, topic and gesture.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Conversation history provides context but is explicitly excluded as factual evidence.&lt;/p&gt;

&lt;p&gt;The model successfully understood mixed-language input such as:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Yeah, alikuwa ametoka wapi?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The selected interface language controls whether Luanda responds in English or Kiswahili.&lt;/p&gt;

&lt;h3&gt;
  
  
  Grounding and validation
&lt;/h3&gt;

&lt;p&gt;Hadithi checks every returned source ID against an approved registry. A model answer cannot display an invented citation.&lt;/p&gt;

&lt;p&gt;If the model returns invalid structured data, cites an unapproved source, claims grounding without evidence, times out, or becomes unavailable, the server returns a reviewed deterministic response. The interface visibly tells the visitor when this happens.&lt;/p&gt;

&lt;p&gt;The Luanda source pack includes material associated with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;National Museums of Kenya and Google Arts &amp;amp; Culture;&lt;/li&gt;
&lt;li&gt;Kisumu County;&lt;/li&gt;
&lt;li&gt;University of Nairobi scholarship on heroic traditions;&lt;/li&gt;
&lt;li&gt;University of Nairobi research on orature, heroism and gender.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For La Llorona, Hadithi is building a broader regional source pack using UNAM research, the Smithsonian Latino Center, Guatemala's Ministry of Culture, folklore scholarship, historical associations, and Wikipedia. Wikipedia is identified as a community-edited source in the model context and in displayed&lt;br&gt;
citations rather than being presented as equivalent to peer-reviewed research.&lt;/p&gt;

&lt;h3&gt;
  
  
  Architecture
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Browser
  |- Three.js: destination globe, Kano Plains and moonlit river
  |- Characters: Luanda Magere and animated La Llorona
  |- MediaRecorder: voice questions
  |- Web Audio API: airship transition and procedural ambience
  `- Chat: conversation, citations and provider status

FastAPI
  |- separate approved source packs for each legend
  |- bounded conversation context
  |- strict generation and citation validation
  |- reviewed deterministic fallbacks
  `- faster-whisper transcription

Cloudflare Workers AI
  `- @cf/meta/llama-3.2-3b-instruct
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Learning through provider failures
&lt;/h3&gt;

&lt;p&gt;The final architecture came from several failed experiments:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Hugging Face reached Gemma but required inference credits;&lt;/li&gt;
&lt;li&gt;free OpenRouter Gemma providers returned capacity errors;&lt;/li&gt;
&lt;li&gt;Cloudflare authenticated correctly, but the selected Gemma model was not available to the account;&lt;/li&gt;
&lt;li&gt;Llama initially returned prose instead of the required JSON;&lt;/li&gt;
&lt;li&gt;a public Chatterbox narration service returned upstream failures.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I switched to an available Llama model, enabled strict structured output, kept provider failures visible, and retained reviewed answers for core questions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Does Open Innovation Matter?
&lt;/h2&gt;

&lt;p&gt;Open models make it possible to build this experience without making one vlosed provider the permanent owner of its future.&lt;/p&gt;

&lt;p&gt;The grounding layer, source registry, validation rules and deterministic answers remain part of Hadithi. The conversational model can be hosted through Cloudflare, another compatible provider, or eventually on community-controlled infrastructure.&lt;/p&gt;

&lt;p&gt;That matters for cultural technology. A school, museum, archive or community should be able to inspect how a story is represented, replace a model, improve the source pack, and challenge an interpretation.&lt;/p&gt;

&lt;p&gt;Open innovation also made failure visible. Instead of disguising unavailable providers or unsupported answers, Hadithi can explain what happened and continue with reviewed material.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Agent Session
&lt;/h2&gt;

&lt;p&gt;GitHub Copilot helped me iterate through the Three.js experiences, transcription pipeline, provider integrations, structured-output failures, citation checks, conversation memory, Blender character adaptation, mobile layout and test coverage.&lt;/p&gt;

&lt;p&gt;The useful part of the agent workflow was not receiving one perfect generated solution. It was being able to test assumptions, inspect failures, replace unreliable providers and preserve the decisions that made the experience safer.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fo5ncgtag9u2178laj459.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fo5ncgtag9u2178laj459.png" alt=" " width="249" height="108"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Spirit of It
&lt;/h2&gt;

&lt;p&gt;The moment the project landed for me was not when the model produced its first answer. It was when the world stopped being a decorative globe and became a choice: Kenya or Mexico, the Kano Plains or a moonlit river.&lt;/p&gt;

&lt;p&gt;For a moment, the story no longer felt like a paragraph preserved somewhere on the internet. It felt close again. Someone could speak in English, add a Kiswahili phrase, ask a follow-up, and receive an answer without the experience pretending that every version of the legend was certain.&lt;/p&gt;

&lt;p&gt;That matters to me because stories do not remain alive simply because they have been stored. They remain alive when someone is curious enough to ask another question and when another person still cares enough to answer.&lt;/p&gt;

&lt;p&gt;Hadithi is built around a simple idea: oral traditions should not become static museum labels, and AI should not rewrite them into confident fiction.&lt;/p&gt;

&lt;p&gt;The gathering place may be changing, but the need to listen remains.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prize Categories
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Open-Source AI / main challenge submission&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Render partner category&lt;/strong&gt; — &lt;a href="https://hadithi-zciw.onrender.com/" rel="noopener noreferrer"&gt;https://hadithi-zciw.onrender.com/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;AI application runtime:&lt;/em&gt; Render hosts Hadithi’s FastAPI backend and interactive frontend.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Open-model transcription:&lt;/em&gt; Runs faster-whisper on CPU for Luanda’s microphone questions.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Source-aware processing:&lt;/em&gt; Runs the source-pack selection, structured-answer validation, citation checks, and reviewed fallbacks.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Public access:&lt;/em&gt; Provides an HTTPS experience reviewers can use without installing tools or relying on your laptop.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Reproducible deployment:&lt;/em&gt; &lt;code&gt;render.yaml&lt;/code&gt; documents the build, startup, health check, and environment configuration.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;Clear provider roles:&lt;/em&gt; Render hosts the application and Whisper; Cloudflare Workers AI runs Llama inference.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;GitHub Copilot&lt;/strong&gt; : I used it for coding &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>Sloth Archivist: Clean Your Camera Roll and Journal As You Sleep</title>
      <dc:creator>S.Busienei</dc:creator>
      <pubDate>Mon, 26 Oct 2026 05:58:56 +0000</pubDate>
      <link>https://dev.to/sbusienei/sloth-archivist-clean-your-camera-roll-and-journal-as-you-sleep-5cld</link>
      <guid>https://dev.to/sbusienei/sloth-archivist-clean-your-camera-roll-and-journal-as-you-sleep-5cld</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week3-2026-10-19"&gt;Hacktoberfest Open-Source AI Challenge Week 3: Slow and Steady&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;My camera roll fills up faster than I clean it: blurry pocket shots, five copies of the same moment, screenshots of codes I needed for thirty seconds. I also keep meaning to start a journal. I have done neither.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sloth Archivist does both while I sleep.&lt;/strong&gt; It runs overnight on my laptop with an open-weight model and gives me two things in the morning:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;A review folder&lt;/strong&gt; with junk moved into reason buckets (&lt;code&gt;duplicate&lt;/code&gt;, &lt;code&gt;blurry&lt;/code&gt;, &lt;code&gt;dark&lt;/code&gt;, &lt;code&gt;screenshot&lt;/code&gt;…).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A short daily journal&lt;/strong&gt; written from the photos worth keeping, where every sentence is checked against what the model actually saw.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;It &lt;strong&gt;never deletes anything&lt;/strong&gt;. Every move is logged in &lt;code&gt;manifest.jsonl&lt;/code&gt;, and &lt;code&gt;python -m sloth undo --run &amp;lt;id&amp;gt;&lt;/code&gt; puts every file back. Only I can empty the review folder, and even then it goes to the Recycle Bin.&lt;/p&gt;

&lt;p&gt;It's for anyone with a camera roll they've given up on and a journal they never started.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;👉 &lt;strong&gt;&lt;a href="https://cherutosharleen.github.io/sloth-archivist/report.html" rel="noopener noreferrer"&gt;See the sample report&lt;/a&gt;&lt;/strong&gt;: a real run over an 18-photo test set, with the summary, the review grid and the journal entry.&lt;/p&gt;

&lt;p&gt;The sample set is deliberately synthetic, so no personal photos appear anywhere in this post or the repo. Each image targets one failure mode:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Near-duplicates&lt;/strong&gt; (perceptual hash should keep only the sharper one):&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Quality failures&lt;/strong&gt; (blurry, underexposed, overexposed, caught by rules with no AI):&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The hard boundary for Gemma&lt;/strong&gt;: a throwaway screenshot (junk) versus a document someone may need later (keep):&lt;/p&gt;

&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/SBusienei" rel="noopener noreferrer"&gt;
        SBusienei
      &lt;/a&gt; / &lt;a href="https://github.com/SBusienei/sloth-archivist" rel="noopener noreferrer"&gt;
        sloth-archivist
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Sloth Archivist&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="https://github.com/SBusienei/sloth-archivist/docs/report.html" rel="noopener noreferrer"&gt;See an example&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Sloth Archivist is an offline-first Python CLI that triages photo folders and writes day-by-day journal entries from the photos worth keeping. It uses deterministic image quality rules first, then local Gemma inference through Ollama for the remaining photos, and keeps a full audit trail of every decision.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Why this project exists&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Large camera rolls usually contain a small number of meaningful photos mixed with duplicates, blurry shots, over/under-exposed images, and throwaway screenshots. Manual cleanup is slow and hard to maintain consistently.&lt;/p&gt;
&lt;p&gt;Sloth Archivist automates this workflow with three priorities:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Safety first&lt;/strong&gt;: nothing is deleted during triage; junk is moved to a review folder and can be restored with one command.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Local inference&lt;/strong&gt;: Gemma runs through Ollama on your machine.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Traceability&lt;/strong&gt;: every decision is logged with stage, reason, model, prompt version, and timing.&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Core workflow&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;code&gt;sloth run&lt;/code&gt; executes this pipeline:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Ingest (&lt;code&gt;ingest.py&lt;/code&gt;&lt;/strong&gt;…&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/SBusienei/sloth-archivist" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;phone camera -&amp;gt; laptop inbox (overnight)
  -&amp;gt; EXIF date + GPS (fallback: file mtime, Google Takeout sidecar JSON)
  -&amp;gt; offline place names (reverse_geocoder, no API key)
  -&amp;gt; rule filters first, no AI:
       - perceptual-hash duplicates (keep the sharpest)
       - blur score (variance of the Laplacian)
       - dark / overexposed thresholds
  -&amp;gt; Gemma 3 4B via Ollama: caption + keep / junk / needs_review as JSON
  -&amp;gt; junk moved to _sloth_review/&amp;lt;reason&amp;gt;/ (manifest logged, undoable)
  -&amp;gt; kept photos grouped by day and place
  -&amp;gt; journal draft -&amp;gt; fact-check -&amp;gt; retry once -&amp;gt; template fallback
  -&amp;gt; static report.html with thumbnails
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Everything runs on a 16GB Windows laptop with no CUDA GPU, using local Python and Ollama. The model is &lt;code&gt;gemma3:4b&lt;/code&gt;, images are resized to 768px, and decoding uses &lt;code&gt;temperature: 0&lt;/code&gt;, so the same photos always give the same output. That made it possible to compare runs fairly.&lt;/p&gt;

&lt;h3&gt;
  
  
  Cheap filters first
&lt;/h3&gt;

&lt;p&gt;Most junk doesn't need a language model. In the 18-photo sample run, &lt;strong&gt;rules classified 9 photos as junk before Gemma saw anything&lt;/strong&gt;, so only 9 needed a model call. On a CPU-only laptop, halving model calls is the difference between "done before morning" and "still running at breakfast." It also makes debugging easier: a rule decision comes with a number (blur score, hash distance, brightness) you can inspect.&lt;/p&gt;

&lt;h3&gt;
  
  
  Gemma decides the rest
&lt;/h3&gt;

&lt;p&gt;Each surviving photo goes to Gemma through &lt;code&gt;ollama.chat&lt;/code&gt; with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;options={"temperature": 0}&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;format=&amp;lt;Pydantic JSON schema&amp;gt;&lt;/code&gt; (caption, verdict, reason, confidence)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Validation is strict. Malformed output is retried up to twice, then the photo is marked &lt;code&gt;needs_review&lt;/code&gt;. &lt;strong&gt;When unsure, the answer is &lt;code&gt;needs_review&lt;/code&gt;, never &lt;code&gt;junk&lt;/code&gt;.&lt;/strong&gt; Missing a junk photo costs nothing; moving a precious one is the real failure. Every decision is logged in &lt;code&gt;decisions.jsonl&lt;/code&gt; with the model name, prompt version and seconds taken.&lt;/p&gt;

&lt;h3&gt;
  
  
  The journal is fact-checked
&lt;/h3&gt;

&lt;p&gt;A small model writing a diary will happily invent a sunset or a friend who wasn't there. So for each day, the journal prompt receives only three kinds of facts: &lt;strong&gt;times, place names and Gemma's own captions&lt;/strong&gt;. Then &lt;code&gt;factcheck.py&lt;/code&gt; checks the draft:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;text is lowercased and crudely stemmed;&lt;/li&gt;
&lt;li&gt;every content word must appear in the facts or a small allow-list (common verbs, feelings, times of day);&lt;/li&gt;
&lt;li&gt;every number must appear in the facts.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If a draft fails, Gemma gets one retry with the rejected words named, for example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;The facts do not mention: bicycles, 3
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If the retry also fails, the day gets a &lt;strong&gt;plain template entry built only from the facts&lt;/strong&gt;. Every line in the journal is either checked or plain data.&lt;/p&gt;

&lt;p&gt;In the sample run checked into the repo, the day ended on the &lt;strong&gt;template&lt;/strong&gt; path: the model's drafts didn't pass, and the fallback did exactly what it was designed to do. I'd rather publish a plain true sentence than a lively invented one.&lt;/p&gt;

&lt;h3&gt;
  
  
  Evaluation on hand-labeled photos
&lt;/h3&gt;

&lt;p&gt;I hand-labeled 10 sample photos in &lt;code&gt;eval/labels.csv&lt;/code&gt; and ran &lt;code&gt;python -m sloth eval&lt;/code&gt;:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Version&lt;/th&gt;
&lt;th&gt;What changed&lt;/th&gt;
&lt;th&gt;Junk precision&lt;/th&gt;
&lt;th&gt;Junk recall&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;v1&lt;/td&gt;
&lt;td&gt;Baseline review prompt + rule front-pass&lt;/td&gt;
&lt;td&gt;0.857&lt;/td&gt;
&lt;td&gt;1.000&lt;/td&gt;
&lt;td&gt;Rules handled 6 photos; Gemma handled 4&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Recall of 1.0 means every photo I labeled junk was caught. Precision of 0.857 means one photo it moved was one I'd have kept. Reading that failure taught me more than the number: misses weren't random model drift but &lt;strong&gt;policy boundaries&lt;/strong&gt;, such as whether a screenshot is throwaway or a record someone may need later. Clearer boundaries in the prompt helped more than adding post-processing. Because nothing is ever deleted, that one wrong move costs a single &lt;code&gt;undo&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  What the check can't see
&lt;/h3&gt;

&lt;p&gt;From my hand review in &lt;code&gt;eval/REVIEW.md&lt;/code&gt;: 0 right, 1 clumsy, 0 wrong. The fact-check verifies support, not writing quality: a sentence can use only true words and still read flat or awkward. The check narrows what can go wrong from "anything the model can imagine" to "true words put together clumsily."&lt;/p&gt;

&lt;h3&gt;
  
  
  One surprise
&lt;/h3&gt;

&lt;p&gt;Local Ollama responsiveness was unreliable in automated runs. To keep CI and dry-run checks deterministic, I added a fake/heuristic Gemma client for non-production validation, while full runs always use the real model. Tests never need Ollama, so they run anywhere.&lt;/p&gt;

&lt;h3&gt;
  
  
  Built with GitHub Copilot
&lt;/h3&gt;

&lt;p&gt;I built this in small tasks with Copilot's coding agent, guided by a &lt;code&gt;.github/copilot-instructions.md&lt;/code&gt; that encoded the project's hard rules: never delete, undo first, Gemma only, &lt;code&gt;temperature: 0&lt;/code&gt;, tests must not need Ollama. Copilot was fast at scaffolding modules and tests; I still had to correct integration details, especially run orchestration, logging and fallback behavior. A GitHub Action runs the tests and a dry-run summary on every push and pull request.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Does Open Innovation Matter?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;My photos never leave the laptop.&lt;/strong&gt; A camera roll holds faces, IDs, bank screenshots, and home addresses hidden in GPS tags. With an open-weight model running locally, none of that is uploaded anywhere. Place names come from an offline dataset.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It costs nothing to run every night.&lt;/strong&gt; A nightly job over a camera roll through a paid vision API is a recurring bill. Here it's electricity.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It works offline.&lt;/strong&gt; On a trip with no signal, the journal still gets written.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I could see and steer every step.&lt;/strong&gt; Same model, same prompt, temperature 0, same output, so every change could be measured on the same photos. Retries are free, so being strict is free.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Where a closed model would be better:&lt;/strong&gt; speed and polish. A frontier vision model would caption faster than my laptop's CPU and write livelier entries. It would still need the same fact-check, and it would need my whole camera roll.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Agent Session
&lt;/h2&gt;

&lt;p&gt;I built this project with iterative Copilot coding sessions and task-by-task validation.&lt;/p&gt;

&lt;p&gt;The architecture and data flow are documented module by module in &lt;a href="https://cherutosharleen.github.io/sloth-archivist/python-ml-walkthrough.html" rel="noopener noreferrer"&gt;&lt;code&gt;docs/python-ml-walkthrough.html&lt;/code&gt;&lt;/a&gt;: each Python module, the inference path, retries, and the run artifacts (&lt;code&gt;manifest.jsonl&lt;/code&gt;, &lt;code&gt;decisions.jsonl&lt;/code&gt;, &lt;code&gt;latest_run.json&lt;/code&gt;).&lt;/p&gt;

&lt;h2&gt;
  
  
  The Lazy Payoff
&lt;/h2&gt;

&lt;p&gt;From the latest sample run:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;18&lt;/strong&gt; photos scanned&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;9&lt;/strong&gt; moved by rules, &lt;strong&gt;4&lt;/strong&gt; moved by Gemma&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;5&lt;/strong&gt; kept&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;1&lt;/strong&gt; journal entry written&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;0&lt;/strong&gt; files deleted, &lt;strong&gt;100%&lt;/strong&gt; restorable with &lt;code&gt;undo&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's 13 of 18 photos I never had to look at individually, and a written trace of the day I'd otherwise never have written. In practice, I review a much smaller folder and still keep a diary, without doing either job myself.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prize Categories
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Gemma:&lt;/strong&gt; Gemma 3 4B handles captioning, keep/junk/needs_review decisions and journal drafting locally through Ollama, with strict JSON schema validation, retries, and a fact-check on every journal sentence.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of GitHub Copilot:&lt;/strong&gt; built module by module with Copilot's coding agent from repository instructions that enforce non-destructive behavior; a GitHub Action runs the tests and a dry-run summary on every push.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Excel: Relevant Or Outdated</title>
      <dc:creator>S.Busienei</dc:creator>
      <pubDate>Thu, 02 Jul 2026 16:46:45 +0000</pubDate>
      <link>https://dev.to/sbusienei/excel-relevant-or-outdated-52a0</link>
      <guid>https://dev.to/sbusienei/excel-relevant-or-outdated-52a0</guid>
      <description>&lt;p&gt;Excel has been there for 40 years, and it continues to stand the test of time. The real question is, Is it worth learning in the Age of AI? I decided to explore what it is by building a mini “M-Pesa Wrapped” (Spotify Wrapped but for my money). Turns out a few formulas could quickly tell me more about my spending habits than a full month of “just checking my balance.”&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Spotify Wrapped Ruined Boring Statements For Me&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Every December, Spotify tells me my top artist, my “listening age,” and how many minutes I spent listening to the same three songs on repeat. It’s fun. It’s personal. It makes numbers feel like a story.&lt;br&gt;
Then I open my M-Pesa statement, a lot of transactions without any narrative. Every once in a while, after a fun adventure of ‘kurudishia mwili pole’ I always wonder: where did my money go?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fts7onullxdt3uvii73tj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fts7onullxdt3uvii73tj.png" alt="Mpesa Statement" width="682" height="456"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What Excel Actually Is (For Anyone Who’s Never Opened It)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It’s a giant table, like a notebook page made entirely of boxes. Each box is called a cell. You can type a number into a cell, a word, a date or a little instruction that tells Excel to do math for you.&lt;br&gt;
That last part is the magic trick. Say you type =B2-C2 into a cell. Excel doesn't just do random calculations, it remembers what’s in that cell and works with it. So if you go back and change what's in box B2, that cell updates itself instantly. No retyping, no redoing the math by hand. Everything connected to it just...updates. That's really the entire reason spreadsheets took over from paper ledgers back in the 1980s, one change and the whole sheet recalculates itself like magic.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fje0fpcviq978m5ji33w6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fje0fpcviq978m5ji33w6.png" alt="How Excel Looks" width="798" height="147"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Okay, But Is It Outdated?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Short answer: no, but it’s had to evolve.&lt;/p&gt;

&lt;p&gt;The honest truth is that Excel isn’t competing to be the most powerful tool anymore, it’s competing to be the most available one. Python and R can do more, but they need setup, syntax, and patience. Power BI and Tableau look slicker, but they require time to learn. Excel is already on your laptop (probably thanks to some cyber in some corner) and you have probably played around with it before.&lt;/p&gt;

&lt;p&gt;There’s also a quieter reason it survives: almost every other tool still exports to it. Bank statements, government portals, POS system still hand reports as spreadsheets. Even brand-new AI-powered analytics tools are being built as Excel add-ins rather than Excel replacements, which says something about who actually has the market share.&lt;/p&gt;

&lt;p&gt;So not outdated, just no longer lonely at the top.&lt;/p&gt;

&lt;h3&gt;
  
  
  Three Real-World Uses
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqwy1tivb8b8x32pqovxq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqwy1tivb8b8x32pqovxq.png" alt="Trends graph" width="799" height="391"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Financial reporting&lt;/strong&gt;&lt;br&gt;
Using my M-Pesa statement, I turned a month of scattered transactions into a single monthly summary, including my highest-spend days and what ate my money most(hint: me). This is exactly what accounting software like QuickBooks and Zoho Books do for a business, just automated and prettier. They pull every transaction, group it, and generate a monthly report. Underneath the polish, it’s the same Excel logic: SUMIF, group by category, find total in each group, done! Even the mpesa monthly statement above is built this way.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Spotting patterns&lt;/strong&gt;&lt;br&gt;
Once the data was summarized, one category quietly ate more of my money than anything else. That’s the exact move retailers make when deciding where to cut costs or invest more. Platforms like Jumia’s seller dashboards run this same logic behind the scenes to flag best and worst performing products, just with a live database instead of a spreadsheet.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Trend analysis over time&lt;/strong&gt;&lt;br&gt;
Grouping transactions by day showed me exactly which days I spend the most (weekends are a disaster for my wallet). This is the same logic behind some business decisions you’ve probably seen, e.g. “Terrific Tuesday” probably exists because someone analysed how low Tuesday Pizza sales were and decided to boost it with a deal.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Getting started is very easy, here are very simple functions that helped derive the story from the data:&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxrujbm8wv5dyfpfk9mnj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxrujbm8wv5dyfpfk9mnj.png" alt="Simple Excel Functions" width="799" height="207"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;(Bonus function: conditional formatting to automatically highlight your single biggest transaction of the month in red)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftq3bklzfrnj9sfd7xz36.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftq3bklzfrnj9sfd7xz36.png" alt="Pie Chart of Spending Categories" width="799" height="459"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Weekend Projects If You Want to Try This Yourself&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here are some ideas on what you can get started on:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;M-Pesa/bank statement Wrapped&lt;/strong&gt; — the one from this article. Great starter project, real data, immediate payoff. There is a very nice step-by-step guide to setup the &lt;a href="https://medium.com/@gracemutheumusungu/mpesa-statement-analysis-project-21267d68894e" rel="noopener noreferrer"&gt;Mpesa Analysis Project here&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A small-business or side-hustle tracker&lt;/strong&gt;: if you sell anything on the side, track orders, costs, and profit margin the same way a big business would.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A job-application tracker&lt;/strong&gt;: dates applied, status, follow-up reminders using conditional formatting to flag anything gone quiet for 2+ weeks.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;My Reflection&lt;/strong&gt;&lt;br&gt;
To track my spending, a pivot table took about three minutes to show me something a full month of casually checking my balance never did, without setting up extra tools. That’s the real case for Excel in 2026, not that it’s the most advanced tool in the room, but that it turns “I think” into “I can see” almost immediately.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Relevant or outdated? After this experiment, I think it is still relevant&lt;/em&gt;&lt;/p&gt;

</description>
      <category>microsoft365</category>
      <category>beginners</category>
      <category>analytics</category>
      <category>mpesa</category>
    </item>
    <item>
      <title>Python For Everyone: Mastering Python The Right Way</title>
      <dc:creator>S.Busienei</dc:creator>
      <pubDate>Fri, 04 Mar 2022 15:13:27 +0000</pubDate>
      <link>https://dev.to/sbusienei/python-for-everyone-mastering-python-the-right-way-18gn</link>
      <guid>https://dev.to/sbusienei/python-for-everyone-mastering-python-the-right-way-18gn</guid>
      <description>&lt;p&gt;I have recently been reading 'Atomic Habits' by James Clear. In the book, James has a captivating style of breaking down the formation of Habits. One particular example is how if we constantly improve our habits by 0.1% daily, in a year we will be 37 times better at the skill. &lt;br&gt;
That is just by merely improving 0.1%, what about 1% 10% 50%; the possibilities are limitless.&lt;br&gt;
This very similar to Mastery of anything and in our case, Mastery of Python. We can only get better if we aim to practice and improve daily even if it's just by 0.1% &lt;a href="https://www.reddit.com/r/NonZeroDay/" rel="noopener noreferrer"&gt;#NoZeroDays&lt;/a&gt;. In this article, I will recommend a few resources that may be helpful in achieving this mastery.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Zen Of Python&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;We can not truly become masters at Python without viewing the Zen of Python. Type &lt;code&gt;import this&lt;/code&gt; on your command line and run it.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;this&lt;/span&gt;
&lt;span class="sh"&gt;'''&lt;/span&gt;&lt;span class="s"&gt;
The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;t special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;re Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;s a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;s do more of those!
&lt;/span&gt;&lt;span class="sh"&gt;'''&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This Zen will give the basic guiding rules for learning and even mastering Python. &lt;br&gt;
No matter what Python Path you intend to pursue, mastery of the basic concepts will be very vital to help you build a strong foundation in Python and allow you to code &lt;strong&gt;The Pythonic Way&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Dear Python Sensei, Here are a few tips to kickstart your journey:&lt;/p&gt;

&lt;h2&gt;
  
  
  Set Your Goals
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Setting goals is effective in helping us accomplish a lot. Before beginning your journey, determine what you hope to accomplish. Are you working towards Web Development, focus on learning Frameworks eg. Django. If it is in Data Analysis mastery of libraries such as Pandas, numpy etc. will be instrumental.&lt;/li&gt;
&lt;li&gt;Recursively breaking down your goals to Monthly, weekly chunks is also very important. In something as basic as a coding session, write down what you hope to achieve within the coding session.
A SMART goal is Specific, Measurable, Achievable, Realistic and within a TimeFrame eg. make a number guessing game, with concepts learnt, within my first 4 weeks.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Resources For Setting Goals: &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Pen and Paper - Write down your goals&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.actitime.com/software-collections/pomodoro-timers" rel="noopener noreferrer"&gt;Pomodoro Timers&lt;/a&gt;: Time-blocking and &lt;strong&gt;Focus Mode&lt;/strong&gt; helps block out chunks of time interspersed with rest to focus on the matter at hand, that is coding.&lt;/li&gt;
&lt;li&gt;Version control Systems eg. &lt;a href="https://github.com/" rel="noopener noreferrer"&gt;Github&lt;/a&gt;, &lt;a href="https://bitbucket.org/product" rel="noopener noreferrer"&gt;Bitbucket&lt;/a&gt;, &lt;a href="https://gitbucket.github.io/" rel="noopener noreferrer"&gt;Gitbucket&lt;/a&gt; help in version control of your code and generally storage of your code. It can also serve as a visual reminder of the progress you make eg. on Github there is a monitoring system that shows how many days you are active on the platform.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Finding A Community
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Sticking to a habit is not solely based on 'Motivation' alone; some days you just don't feel like it. A community/accountability partner will be paramount in keeping you in check and challenging you to be better. &lt;/li&gt;
&lt;li&gt;Such communities can be on social media platforms eg. &lt;a href="https://www.reddit.com/r/Python/" rel="noopener noreferrer"&gt;r/python&lt;/a&gt; and &lt;a href="https://www.reddit.com/r/learnpython" rel="noopener noreferrer"&gt;r/learnpython&lt;/a&gt;, these platforms have a lot of people looking to learn python like you.&lt;/li&gt;
&lt;li&gt;Tags like &lt;a href="https://twitter.com/search?q=%23100DaysOfCode&amp;amp;src=typeahead_click" rel="noopener noreferrer"&gt;#100DaysOfCode&lt;/a&gt; on Twitter and other platforms allow different programmers to share their progress journeys during the sacred 100 days of code.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Stick To A Few Beneficial Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The internet has been very revolutionary in every sense. In terms of learning it has granted us access to a ton of resources at our fingertips. I can literally just type 'Harvard Python Course' and get access to the &lt;a href="https://pll.harvard.edu/course/cs50s-introduction-programming-python?delta=0" rel="noopener noreferrer"&gt;CS50 course on edx&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;All these resources can suck as into a 'Learning rabbit hole'. Jumping from one exciting resource to another. My advice; Set and focus on your goal, identify a suitable course that helps you in 
the pursuit of your goal. Break the course down to manageable chunks and follow through with it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Pro Tip&lt;/strong&gt;: Select a well structured course like those on &lt;a href="https://www.freecodecamp.org/" rel="noopener noreferrer"&gt;Free Code Camp&lt;/a&gt;. A well-structured course saves on time and resources otherwise wasted scouring the internet.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You don't have to finish the course, just stick with it until you've achieved your goal.&lt;/li&gt;
&lt;li&gt;Take Notes: &amp;gt; I hear and I forget. I see and I remember. I do and I understand. During a lesson write down short keywords. After the lesson try and recall what you learnt during lesson. If you are not a fan of writing down on paper(which I strongly root for), use &lt;a href="https://www.notion.so/" rel="noopener noreferrer"&gt;Notion&lt;/a&gt;, a very easy, convenient and resourceful note-taking application.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The Last and Ultimate Python Secret!!&lt;/p&gt;

&lt;h2&gt;
  
  
  CODE!!
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Even if you follow tutorials and code as the instructor goes through the concept, you still have to put in the hours. Start with as little time as you like and work your way up. Constant Coding and dedication is the biggest difference between a Beginner and Master.&lt;/li&gt;
&lt;li&gt;I appreciate that you are still reading this article, but after quickly liking this article, please click on some of the resources I have shared- the resources are all free to use and will be of great help to you.&lt;/li&gt;
&lt;li&gt;Don't be scared of bugs or being stuck on a problem. The world has millions of developers, your problem isn't as bad as it seems just google it. Platforms like Stack Overflow exist for this sole purpose. In this Journey, &lt;em&gt;Google Is Your Best Friend&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;u&gt;Day 1 of Coding&lt;/u&gt;&lt;br&gt;
&lt;em&gt;Creating a Hello World Program&lt;/em&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Download &lt;a href="https://www.python.org/downloads/" rel="noopener noreferrer"&gt;Python&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Open your command line. Use the (Win + R) shortcut. Write &lt;em&gt;cmd&lt;/em&gt; and press enter. &lt;/li&gt;
&lt;li&gt;On the command line, switch to the python terminal by typing &lt;em&gt;py&lt;/em&gt; &lt;code&gt;C:\Users\user&amp;gt;py&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;On the Python terminal, print Hello World
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Hello World!!&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;Hello&lt;/span&gt; &lt;span class="n"&gt;World&lt;/span&gt;&lt;span class="err"&gt;!!&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You are now ready for the  greatness.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Install your Favourite Text Editor. Here are a few examples: &lt;a href="https://code.visualstudio.com/download" rel="noopener noreferrer"&gt;Visual Studio&lt;/a&gt;, &lt;a href="https://atom.io/" rel="noopener noreferrer"&gt;Atom&lt;/a&gt;, &lt;a href="https://www.sublimetext.com/" rel="noopener noreferrer"&gt;SublimeText&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Concepts To Learn at Every Stage from Basic to Advanced
&lt;/h2&gt;

&lt;p&gt;&lt;u&gt;&lt;strong&gt;Basic&lt;/strong&gt;&lt;/u&gt;&lt;br&gt;
Most of them are in &lt;a href="https://dev.to/cheruto/introduction-to-modern-python-1kog"&gt;My First article ever&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&lt;u&gt;&lt;strong&gt;Intermediate&lt;/strong&gt;&lt;/u&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Comprehensions&lt;/li&gt;
&lt;li&gt;Data Structures&lt;/li&gt;
&lt;li&gt;Lambda Functions&lt;/li&gt;
&lt;li&gt;Files I/0&lt;/li&gt;
&lt;li&gt;Inheritance and OOP&lt;/li&gt;
&lt;li&gt;Dunder Methods&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;u&gt;&lt;strong&gt;Advanced&lt;/strong&gt;&lt;/u&gt;&lt;br&gt;
1.Frameworks(Django, Flask, etc.)&lt;br&gt;
2.Decorators and Generators&lt;br&gt;
3.Multithreading and Processing&lt;br&gt;
4.Testing&lt;br&gt;
5.Complex Libraries&lt;/p&gt;

&lt;p&gt;Looking Forward To Hearing from You. If you are a more experienced programmer, please leave some of your tips and tricks with us on the comment section. &lt;br&gt;
Looking Forward to hearing Your Thoughts.&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>python</category>
      <category>programming</category>
      <category>github</category>
    </item>
    <item>
      <title>Introduction to Data Structures</title>
      <dc:creator>S.Busienei</dc:creator>
      <pubDate>Sun, 20 Feb 2022 19:58:35 +0000</pubDate>
      <link>https://dev.to/sbusienei/introduction-to-data-structures-and-algorithms-with-python-1oei</link>
      <guid>https://dev.to/sbusienei/introduction-to-data-structures-and-algorithms-with-python-1oei</guid>
      <description>&lt;ul&gt;
&lt;li&gt;A Data Structure is a special format of organizing, processing, retrieving and storing data. They may not be discussed mainly but they are very vital in our systems today. &lt;/li&gt;
&lt;li&gt;Today we will focus on the basic data structures that are our unsung heroes of our systems today. Here is a link to an article that has more general information on &lt;a href="https://searchsqlserver.techtarget.com/definition/data-structure" rel="noopener noreferrer"&gt;What are Data Structures&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  1. Lists
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Lists contain multiple values in an ordered sequence. Values inside the lists are called items and are comma-separated.. - - The lists are zero-indexed hence the first value in a list is usually at index O. Indices are used for item retrieval.&lt;/li&gt;
&lt;li&gt;When a list is created all the elements are stored contiguously in memory(the memory allocated for a list is within the same location)
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;pets&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;cats&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;dogs&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;rabbit&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;parrot&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;pets&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;cats&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;pets&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;parrot&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;pets&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;dogs&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;rabbit&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;pets&lt;/span&gt;&lt;span class="p"&gt;[:&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;cats&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;dogs&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;rabbit&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;pets&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;:]&lt;/span&gt;
&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;rabbit&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;parrot&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;u&gt;&lt;strong&gt;List Methods&lt;/strong&gt;&lt;/u&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;u&gt;Append&lt;/u&gt; - this method adds an item to the end of the list&lt;/li&gt;
&lt;li&gt;
&lt;u&gt;Insert&lt;/u&gt; - inserts an item at a particular index&lt;/li&gt;
&lt;li&gt;
&lt;u&gt;Delete&lt;/u&gt; - deletes an item at a particular index&lt;/li&gt;
&lt;li&gt;
&lt;u&gt;Remove&lt;/u&gt; - deletes the item passed&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;If there are 2 or more instances of the same item, the first instance is usually deleted&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;u&gt;Sorting&lt;/u&gt; - ordering of items in a list&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Lists are sorted according in ascending order&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Alphabetical lists are sorted in "ASCIIbetical Order", that is uppercase letters then lowercase letters later&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Lists with multiple data types cannot be sorted&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The reverse() method orders the items in the list in descending order&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;pets&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;monkey&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;pets&lt;/span&gt;
&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;cats&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;dogs&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;rabbit&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;parrot&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;monkey&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;pets&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;insert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;hamster&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;pets&lt;/span&gt;
&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;cats&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;hamster&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;dogs&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;rabbit&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;parrot&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;monkey&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;del&lt;/span&gt; &lt;span class="n"&gt;pets&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;pets&lt;/span&gt;
&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;hamster&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;dogs&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;rabbit&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;parrot&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;monkey&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;pets&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;remove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;dogs&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;pets&lt;/span&gt;
&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;hamster&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;rabbit&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;parrot&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;monkey&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;pets&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sort&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;pets&lt;/span&gt;
&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;hamster&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;monkey&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;parrot&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;rabbit&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;pets&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;reverse&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;pets&lt;/span&gt;
&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;rabbit&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;parrot&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;monkey&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;hamster&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  2.Tuples
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;They are very similar to lists but are immutable(hence we cannot add, remove or change them in any way). This can be advantageous as python is able to run them faster than lists.&lt;/li&gt;
&lt;li&gt;They are formed using &lt;strong&gt;( )&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;I higlighted, key differences between lists and tuples in &lt;a href="https://dev.to/cheruto/introduction-to-modern-python-1kog"&gt;my previous blog post.&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;pets&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;rabbit&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;parrot&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;monkey&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;hamster&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;pets&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;rabbit&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;

&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;pets&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;cats&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nc"&gt;Traceback &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;most&lt;/span&gt; &lt;span class="n"&gt;recent&lt;/span&gt; &lt;span class="n"&gt;call&lt;/span&gt; &lt;span class="n"&gt;last&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
  &lt;span class="n"&gt;File&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;&amp;lt;stdin&amp;gt;&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;module&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nb"&gt;AttributeError&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;tuple&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt; &lt;span class="nb"&gt;object&lt;/span&gt; &lt;span class="n"&gt;has&lt;/span&gt; &lt;span class="n"&gt;no&lt;/span&gt; &lt;span class="n"&gt;attribute&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;add&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;

&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;del&lt;/span&gt; &lt;span class="n"&gt;pets&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="nc"&gt;Traceback &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;most&lt;/span&gt; &lt;span class="n"&gt;recent&lt;/span&gt; &lt;span class="n"&gt;call&lt;/span&gt; &lt;span class="n"&gt;last&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
  &lt;span class="n"&gt;File&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;&amp;lt;stdin&amp;gt;&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;module&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nb"&gt;TypeError&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;tuple&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt; &lt;span class="nb"&gt;object&lt;/span&gt; &lt;span class="n"&gt;doesn&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;t support item deletion

#it can also be defined with a comma after the last item to explicitly declare them as tuples
&lt;/span&gt;&lt;span class="gp"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;pets&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;rabbit&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;parrot&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;monkey&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;hamster&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,)&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;type&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pets&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="err"&gt;'&lt;/span&gt;&lt;span class="nc"&gt;tuple&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;&amp;gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  3. Dictionaries
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;They are unordered data structures that store items in (Key:Value) pairs. They are defined using &lt;strong&gt;{ }&lt;/strong&gt; or using the **dict() **constructor.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;pets_colour&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;cat&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;white&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;horse&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;dark&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;dog&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;golden&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;pets_colour&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cat&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;myfriends_age&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Chao&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;21&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Too&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;19&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Rono&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Juma&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;32&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;myfriends_age&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Chao&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;21&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Too&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;19&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Rono&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Juma&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;32&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Dictionary Methods&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;These methods can be used in &lt;strong&gt;for&lt;/strong&gt; loops to retrieve the specified elements.&lt;/li&gt;
&lt;li&gt;dictionaryName.&lt;strong&gt;keys()&lt;/strong&gt; - is used to retrieve the keys used in the dictionary&lt;/li&gt;
&lt;li&gt;dictionaryName.&lt;strong&gt;values()&lt;/strong&gt; - is used to retrieve the values used in the dictionary&lt;/li&gt;
&lt;li&gt;dictionaryName.&lt;strong&gt;items()&lt;/strong&gt; - is used to retrieve both the values and keys in the dictionary
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;myfriends_age&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Chao&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;21&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Too&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;19&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Rono&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Juma&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;32&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;age&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;myfriends_age&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;values&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
&lt;span class="p"&gt;...&lt;/span&gt;     &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;age&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="bp"&gt;...&lt;/span&gt;
&lt;span class="mi"&gt;21&lt;/span&gt;
&lt;span class="mi"&gt;19&lt;/span&gt;
&lt;span class="mi"&gt;40&lt;/span&gt;
&lt;span class="mi"&gt;32&lt;/span&gt;


&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;myfriends_age&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;keys&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
&lt;span class="p"&gt;...&lt;/span&gt;     &lt;span class="nf"&gt;print &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="bp"&gt;...&lt;/span&gt;
&lt;span class="n"&gt;Chao&lt;/span&gt;
&lt;span class="n"&gt;Too&lt;/span&gt;
&lt;span class="n"&gt;Rono&lt;/span&gt;
&lt;span class="n"&gt;Juma&lt;/span&gt;


&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;age&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;myfriends_age&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;items&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
&lt;span class="p"&gt;...&lt;/span&gt;     &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; is &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;age&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; years old&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="bp"&gt;...&lt;/span&gt;
&lt;span class="n"&gt;Chao&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="mi"&gt;21&lt;/span&gt; &lt;span class="n"&gt;years&lt;/span&gt; &lt;span class="n"&gt;old&lt;/span&gt;
&lt;span class="n"&gt;Too&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="mi"&gt;19&lt;/span&gt; &lt;span class="n"&gt;years&lt;/span&gt; &lt;span class="n"&gt;old&lt;/span&gt;
&lt;span class="n"&gt;Rono&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="mi"&gt;40&lt;/span&gt; &lt;span class="n"&gt;years&lt;/span&gt; &lt;span class="n"&gt;old&lt;/span&gt;
&lt;span class="n"&gt;Juma&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="mi"&gt;32&lt;/span&gt; &lt;span class="n"&gt;years&lt;/span&gt; &lt;span class="n"&gt;old&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  4. Sets
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;They are unordered(they can be saved and retrieved in whatever order and cannot be referenced by an id or key) collection of items, unchangeable and only allow unique items(hence no repetition of values). &lt;/li&gt;
&lt;li&gt;To create a new set, we use the &lt;strong&gt;set()&lt;/strong&gt; constructor, the curly braces { } are too ambiguous and may create a dictionary instead
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;#creating a set using curly braces { }
&lt;/span&gt;&lt;span class="n"&gt;odd_numbers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="c1"&gt;#check set membership
&lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;odd_numbers&lt;/span&gt;
&lt;span class="c1"&gt;#results in True
&lt;/span&gt;
&lt;span class="c1"&gt;#creating a set using a set constructor
&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;odd_numbers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;set&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;odd_numbers&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;#inserting elements into the set
&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;odd_numbers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;11&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;odd_numbers&lt;/span&gt;  
&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;11&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;      

&lt;span class="c1"&gt;#adding a duplicate value does not change the set
&lt;/span&gt;&lt;span class="n"&gt;odd_numbers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;odd_numbers&lt;/span&gt;
 &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;11&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;    

&lt;span class="c1"&gt;#length of the set
&lt;/span&gt;&lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;odd_numbers&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;6&lt;/span&gt;

&lt;span class="c1"&gt;#Removing an item
&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;odd_numbers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;remove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;odd_numbers&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;odd_numbers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;discard&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;odd_numbers&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;odd_numbers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;remove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nc"&gt;Traceback &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;most&lt;/span&gt; &lt;span class="n"&gt;recent&lt;/span&gt; &lt;span class="n"&gt;call&lt;/span&gt; &lt;span class="n"&gt;last&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
  &lt;span class="n"&gt;File&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;&amp;lt;stdin&amp;gt;&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;module&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nb"&gt;KeyError&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;odd_numbers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;discard&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;odd_numbers&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;#delete entire set
&lt;/span&gt;&lt;span class="k"&gt;del&lt;/span&gt; &lt;span class="n"&gt;odd_numbers&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Frozen Sets are immutable versions of sets. We can not insert or delete from them but rather query them.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;odd_numbers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;frozenset&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;11&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt; 
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;odd_numbers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;13&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nc"&gt;Traceback &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;most&lt;/span&gt; &lt;span class="n"&gt;recent&lt;/span&gt; &lt;span class="n"&gt;call&lt;/span&gt; &lt;span class="n"&gt;last&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
  &lt;span class="n"&gt;File&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;&amp;lt;stdin&amp;gt;&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;module&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nb"&gt;AttributeError&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;frozenset&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt; &lt;span class="nb"&gt;object&lt;/span&gt; &lt;span class="n"&gt;has&lt;/span&gt; &lt;span class="n"&gt;no&lt;/span&gt; &lt;span class="n"&gt;attribute&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;add&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;These frozensets are hashable and can be used as dictionary keys.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;odd_numbers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nf"&gt;frozenset&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;11&lt;/span&gt;&lt;span class="p"&gt;}):&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;These are Odd Numbers&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;odd_numbers&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;frozenset&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;11&lt;/span&gt;&lt;span class="p"&gt;})]&lt;/span&gt;
&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;These are Odd Numbers&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  5. Queues
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Queues function just like real-life queues observing the FIFO(First In First Out) principle. Items &lt;strong&gt;enqueued&lt;/strong&gt; into the queue first are usually *&lt;em&gt;dequeued *&lt;/em&gt; first. &lt;/li&gt;
&lt;li&gt;They are implemented using either lists(they can be quite slow) or inbuilt &lt;strong&gt;Queue module&lt;/strong&gt;(especially used with parallel programming due to the resource locks) or the &lt;strong&gt;deque module&lt;/strong&gt; from collections(for general use)
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;#Using Lists
&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;my_queue&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;my_queue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;my_queue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;my_queue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;my_queue&lt;/span&gt;
&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;my_queue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;pop&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="c1"&gt;#pop at index 0
&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;my_queue&lt;/span&gt;
&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="c1"&gt;#using the queue module
&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;queue&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Queue&lt;/span&gt;  
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;my_queue&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Queue&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="c1"&gt;# We use .put() to insert value and .get() to pop the first one.
&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;my_queue&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Queue&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;my_queue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;put&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;my_queue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;put&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;my_queue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;put&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;list&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;my_queue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;queue&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;my_queue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;list&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;my_queue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;queue&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="c1"&gt;#Using collections.deque
&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;collections&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;deque&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;my_queue&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;deque&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;my_queue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Me&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;my_queue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Myself&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;my_queue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;I&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;my_queue&lt;/span&gt;
&lt;span class="nf"&gt;deque&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Me&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Myself&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;I&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;my_queue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;popleft&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Me&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;my_queue&lt;/span&gt;
&lt;span class="nf"&gt;deque&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Myself&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;I&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  6. Stacks
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;They are data structures that implement the LIFO(Last In First Out) principle of accessing, inserting or deleting items. Items are *push*ed (inserted into the stack) and *pop*ped(removed from the stack) at the top of the stack (hence does not allow random retrieval like arrays and lists)&lt;/li&gt;
&lt;li&gt;They can be implemented using &lt;strong&gt;Lists&lt;/strong&gt; or &lt;strong&gt;deque&lt;/strong&gt; module from collections
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;my_stack&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;my_stack&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;I&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;my_stack&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;love&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;my_stack&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Python&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;my_stack&lt;/span&gt;
&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;I&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;love&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Python&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;my_stack&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;pop&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Python&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;my_stack&lt;/span&gt;
&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;I&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;love&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;


&lt;span class="c1"&gt;#using deque
&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;collections&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;deque&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;my_stack&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;deque&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;my_stack&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;I&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;my_stack&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;love&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;my_stack&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Python&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;my_stack&lt;/span&gt;
&lt;span class="nf"&gt;deque&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;I&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;love&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Python&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;my_stack&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;pop&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Python&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  7. Linked Lists
&lt;/h2&gt;

&lt;p&gt;** Whew! This is a whole topic but I'll skim over the basics here.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Linked lists is a data structure that contains a chain of nodes in different parts of memory that are linked to each other.&lt;/li&gt;
&lt;li&gt;There are different types of linked lists(singly and doubly). Singly linked lists can be traversed in only one direction - left to right while doubly linked lists can be traversed left to right and right to left.&lt;/li&gt;
&lt;li&gt;Each node contains its own data value and a memory address that references to the memory location of the next node.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;u&gt;Creating a Node&lt;/u&gt; - create a node class with the data and next variables.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Node&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="p"&gt;...&lt;/span&gt;   &lt;span class="c1"&gt;# constructor
&lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;   &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;next&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;span class="p"&gt;...&lt;/span&gt;     &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;
&lt;span class="p"&gt;...&lt;/span&gt;     &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;next&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;next&lt;/span&gt;
&lt;span class="bp"&gt;...&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="c1"&gt;# Create a single node
&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;first&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Node&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;first&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;3&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;u&gt;Create a Linked List&lt;/u&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The first element in the Linked List is the &lt;strong&gt;head&lt;/strong&gt; of the list.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;LinkedList&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;head&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;u&gt;Linking nodes within the list&lt;/u&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;new_node&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Node&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;head&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;next&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;new_node&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;There is a lot to cover within Linked Lists, I won't cover majority of it here since this post is getting too long.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Data structures are very vital and if you want to work in FAANG companies, mastery of this structures will come in handy.&lt;/li&gt;
&lt;li&gt;This is just the tip of the iceberg. Advanced structures like graphs in Dijkstra's Algorithm are used in Google Maps for distance estimations. &lt;/li&gt;
&lt;li&gt;A very important part of data structures is their &lt;strong&gt;Memory&lt;/strong&gt; and &lt;strong&gt;Time&lt;/strong&gt; Complexities. These complexities dictate the advantage of one structure over another for different use cases.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In the meantime, let me know in the comments section where the data structures above can be fundamental.&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>datastructures</category>
      <category>algorithms</category>
      <category>interviewprep</category>
    </item>
    <item>
      <title>Introduction to Modern Python</title>
      <dc:creator>S.Busienei</dc:creator>
      <pubDate>Mon, 14 Feb 2022 10:35:29 +0000</pubDate>
      <link>https://dev.to/sbusienei/introduction-to-modern-python-1kog</link>
      <guid>https://dev.to/sbusienei/introduction-to-modern-python-1kog</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;You most probably know why and are now scouring the internet for Zen advice on how to go about the language. Well, Same here.&lt;br&gt;
We will discuss the absolute basics and I will link some resources(and cheatsheets) that will be be helpful in learning the Language. I will discuss Primitive Data Types, Math Operands and inbuilt data Structures.&lt;/p&gt;


&lt;h2&gt;
  
  
  Data Types
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Strings&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Strings are usually alphanumeric characters enclosed in "" or ' '. They can be manipulated in a variety of ways through:
Concatenation, Replication, Slicing and a variety of other methods(convert to upper, lower and replacing or iterating through the characters)
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Python&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;
&lt;span class="n"&gt;y&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Developer&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;
&lt;span class="c1"&gt;#string Concatenation
&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt; &lt;span class="c1"&gt;# returns PythonDeveloper
#string Replication
&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="c1"&gt;# returns PythonPythonPython
&lt;/span&gt;
&lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# length of string -- in this case 6
&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="c1"&gt;#returns first letter - p
&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="c1"&gt;#returns the last letter - n
&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="c1"&gt;#returns characters from within the specified range -- pyt
&lt;/span&gt;
&lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;I am a {x }{y}&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt; &lt;span class="c1"&gt;# returns I am a python developer 
&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;upper&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;    &lt;span class="c1"&gt;#converts to uppercase PYTHON
&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;lower&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;    &lt;span class="c1"&gt;#converts to uppercase python
&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;title&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;    &lt;span class="c1"&gt;#converts to titlecase Python
&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;strip&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;    &lt;span class="c1"&gt;#removes first and last character and returns the string
&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;find&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="err"&gt;“&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="err"&gt;”&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;#finds index of passed character within the string
&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="err"&gt;“&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="err"&gt;”&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="err"&gt;“&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="err"&gt;”&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;#replaces the first passed character with the second one
&lt;/span&gt;&lt;span class="err"&gt;“&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="err"&gt;”&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;      &lt;span class="c1"&gt;#find character within the string
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;2. Numeric&lt;/strong&gt; - These values can wither be integers, floats or complex numbers &lt;br&gt;
&lt;strong&gt;3. Boolean&lt;/strong&gt; - These is either True or False. It can be used mainly for comparison operations and conditional statements.&lt;br&gt;
&lt;strong&gt;4. Special&lt;/strong&gt;- None&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;       &lt;span class="c1"&gt;# integer
&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;1.1&lt;/span&gt;     &lt;span class="c1"&gt;# float
&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mf"&gt;2j&lt;/span&gt;  &lt;span class="c1"&gt;# complex number (a + bi)
&lt;/span&gt;&lt;span class="n"&gt;d&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="err"&gt;“&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="err"&gt;”&lt;/span&gt;     &lt;span class="c1"&gt;# string
&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;    &lt;span class="c1"&gt;# boolean (True / False)
&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt;      &lt;span class="c1"&gt;#an empty list evaluates to None
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Math Operands
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Mathematical Operands enable the performance of mathematical operations within our program. &lt;/li&gt;
&lt;li&gt;Just like ordinary mathematics, the operands appear in order of precedence as listed below:
(*&lt;em&gt;) (&lt;/em&gt;)(/)(//)(%)  (+)(-) in that order.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;     &lt;span class="c1"&gt;#returns the exponent = 8
&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;      &lt;span class="c1"&gt;# returns 6
&lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;     &lt;span class="c1"&gt;#returns 4
&lt;/span&gt;&lt;span class="mi"&gt;24&lt;/span&gt; &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;    &lt;span class="c1"&gt;#returns 4
&lt;/span&gt;&lt;span class="mi"&gt;24&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;     &lt;span class="c1"&gt;#returns the remainder that is 4
&lt;/span&gt;&lt;span class="mi"&gt;28&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;     &lt;span class="c1"&gt;#returns 31
&lt;/span&gt;&lt;span class="mi"&gt;28&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;     &lt;span class="c1"&gt;#returns 25
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Data Structures
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Lists&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Lists contain a collection of items. They are very similar to arrays, however the only difference is that list can store different data type elements while arrays only store elements of a similar data type&lt;/li&gt;
&lt;li&gt;They are defined using [] or list() constructor
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;list1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;potatoes&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;59&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;8.5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;sugar&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;list2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;list&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;potatoes&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;59&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;8.5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;sugar&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;2. Tuples&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;They are an immutable(hence they cannot be changed or modified once declared) and unordered data structures that store a collection of items. They are defined using ()
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;tuple1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;potatoes&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;59&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;8.5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;sugar&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tuple1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# returns 4 that is the number of items in the tuple
&lt;/span&gt;&lt;span class="k"&gt;del&lt;/span&gt; &lt;span class="n"&gt;tuple1&lt;/span&gt; &lt;span class="c1"&gt;# to delete the entire tuple
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Difference Between Tuples and Lists&lt;/em&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Lists are defined using [] while tuples are defined using ()&lt;/li&gt;
&lt;li&gt;Lists are mutable(can be changed and modified) while tuples are immutable&lt;/li&gt;
&lt;li&gt;Tuples are more memory efficient and execute faster than lists.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;3. Dictionaries&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dictionaries are data structures that store items as key:value pairs. They are defined using {}&lt;/li&gt;
&lt;li&gt;Using the keys and values different items within the dictionary can be accessed
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;my_dict&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;d&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;c&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;b&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;a&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="n"&gt;my_dict&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="c1"&gt;# returns the first item in the dictionary
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;4. Sets&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sets are unordered data structures that store unique elements_(No duplicates Allowed!!)_. They are defined using {}
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;my_set&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;VARIABLES AND CONSTANTS&lt;/strong&gt;&lt;br&gt;
Variables are place-holders that serve to reference items. CONSTANTS are values that once declared remain the same and cannot be changed within the scope of the program.&lt;br&gt;
Rules that Governs naming a variable.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;It can be only one word(No spaces between the words please)&lt;/li&gt;
&lt;li&gt;It can use only letters, numbers, and the underscore (_) character. &lt;/li&gt;
&lt;li&gt;It can’t start with a number.
CONSTANTS are usually declared in uppercase letters.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Comments&lt;/strong&gt;&lt;br&gt;
Python comments are preceded with a #. For multiple lines, you can learn a shorthand command for commenting, eg. &lt;strong&gt;Ctrl + K + C&lt;/strong&gt; in VSCode.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;#this is a CONSTANT
&lt;/span&gt;&lt;span class="n"&gt;CONSTANT&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;
&lt;span class="c1"&gt;#this are variables
&lt;/span&gt;&lt;span class="n"&gt;myName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Developer X&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;
&lt;span class="n"&gt;my_age&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;15&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Beginner Friendly CheatSheets
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;Programming with Mosh : &lt;a href="https://programmingwithmosh.com/python/python-3-cheat-sheet/" rel="noopener noreferrer"&gt;https://programmingwithmosh.com/python/python-3-cheat-sheet/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Official Python Cheatsheet : &lt;a href="https://www.pythoncheatsheet.org/" rel="noopener noreferrer"&gt;https://www.pythoncheatsheet.org/&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>python</category>
      <category>beginners</category>
      <category>programming</category>
      <category>learnpython</category>
    </item>
  </channel>
</rss>
