{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Lists\n", " \n", " 1.) Creating lists\n", " 2.) Indexing and Slicing Lists\n", " 3.) Basic List Methods\n", " 4.) Nesting Lists\n", " 5.) Introduction to List Comprehensions" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "tags": [] }, "outputs": [], "source": [ "# Assign a list to an variable named my_list\n", "my_list = [1,2,3]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We just created a list of integers, but lists can actually hold different object types. For example:" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "tags": [] }, "outputs": [], "source": [ "my_list = ['A string',23,100.232,'o']" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Just like strings, the len() function will tell you how many items are in the sequence of the list." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "len(my_list)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Indexing and Slicing\n", "Indexing and slicing work just like in strings. Let's make a new list to remind ourselves of how this works:" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "tags": [] }, "outputs": [], "source": [ "my_list = ['one','two','three',4,5]" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Grab element at index 0\n", "my_list[0]" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Grab index 1 and everything past it\n", "my_list[1:]" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Grab everything UP TO index 3\n", "my_list[:3]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can also use + to concatenate lists, just like we did for strings." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "my_list + ['new item']" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note: This doesn't actually change the original list!" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "my_list" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You would have to reassign the list to make the change permanent." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "tags": [] }, "outputs": [], "source": [ "# Reassign\n", "my_list = my_list + ['add new item permanently']" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "my_list" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can also use the * for a duplication method similar to strings:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Make the list double\n", "my_list * 2" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Again doubling not permanent\n", "my_list" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Basic List Methods\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "tags": [] }, "outputs": [], "source": [ "# Create a new list\n", "list1 = [1,2,3]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Use the **append** method to permanently add an item to the end of a list:" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "tags": [] }, "outputs": [], "source": [ "# Append\n", "list1.append('append me!')" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Show\n", "list1" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Use **pop** to \"pop off\" an item from the list. By default pop takes off the last index, but you can also specify which index to pop off. Let's see an example:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Pop off the 0 indexed item\n", "list1.pop(0)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Show\n", "list1" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "tags": [] }, "outputs": [], "source": [ "# Assign the popped element, remember default popped index is -1\n", "popped_item = list1.pop()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "popped_item" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Show remaining list\n", "list1" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "It should also be noted that lists indexing will return an error if there is no element at that index. For example:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "list1[100]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can use the **sort** method and the **reverse** methods to also effect your lists:" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "tags": [] }, "outputs": [], "source": [ "new_list = ['a','e','x','b','c']" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#Show\n", "new_list" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "tags": [] }, "outputs": [], "source": [ "# Use reverse to reverse order (this is permanent!)\n", "new_list.reverse()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "new_list" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "tags": [] }, "outputs": [], "source": [ "# Use sort to sort the list (in this case alphabetical order, but for numbers it will go ascending)\n", "new_list.sort()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "new_list" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Nesting Lists" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "tags": [] }, "outputs": [], "source": [ "# Let's make three lists\n", "lst_1=[1,2,3]\n", "lst_2=[4,5,6]\n", "lst_3=[7,8,9]\n", "\n", "# Make a list of lists to form a matrix\n", "matrix = [lst_1,lst_2,lst_3]" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Show\n", "matrix" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can again use indexing to grab elements, but now there are two levels for the index. The items in the matrix object, and then the items inside that list!" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Grab first item in matrix object\n", "matrix[0]" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Grab first item of the first item in the matrix object\n", "matrix[0][0]" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.8" }, "widgets": { "application/vnd.jupyter.widget-state+json": { "state": {}, "version_major": 2, "version_minor": 0 } } }, "nbformat": 4, "nbformat_minor": 4 }