{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Python Set Comprehensions\n", "Note that Python sets are not ordered, and duplicates are automatically removed. \n", "Otherwise, comprehensions work just like with lists. \n", "General syntax is: new_set = {expression for item in iterable if condition}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Simple Comprehension using Range" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}\n" ] } ], "source": [ "ints = {i for i in range(10)}\n", "print(ints)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Comprehension using Range with a Condition filter\n", "Only take even values from range" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{0, 2, 4, 6, 8}\n" ] } ], "source": [ "evens = {i for i in range(10) if i%2 == 0}\n", "print(evens)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Apply math function to values in range\n", "Here, square each value" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{0, 1, 64, 4, 36, 9, 16, 49, 81, 25}\n" ] } ], "source": [ "squares = {i*i for i in range(10)}\n", "print(squares)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note that Python eliminates duplicates from sets" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{0, 1, 4, 9, 16, 25}\n" ] } ], "source": [ "sqrs = {i*i for i in range(-5, 5)}\n", "print(sqrs)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Set Comprehension on a List" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{4, 9, 169, 49, 121, 25}\n" ] } ], "source": [ "primes = [2, 2, 2, 3, 3, 5, 5, 5, 7, 11, 11, 13, 13, 13, 13]\n", "primes_squared = {p*p for p in primes}\n", "print(primes_squared)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### More Complex Expressions: quadratic transformation\n", "Any expression is allowed. More complex expressions can be put in parentheses. \n", "Here, quadratic equation: \n", "2x^2 + 5x + 10" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{43, 143, 307, 85, 28, 413}\n" ] } ], "source": [ "transformed = {(2*x*x + 5*x + 10) for x in primes}\n", "print(transformed)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Flatten List and eliminate duplicates\n", "Syntax: {leaf for branch in tree for leaf in branch}" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{1, 2, 3, 98, 76}\n" ] } ], "source": [ "nums = [[1,3],[2,3],[3,98],[76,1]]\n", "flat_set = {a for b in nums for a in b}\n", "print(flat_set)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Eliminate Dups from a List\n", "We can easily eliminate differences in capitalization, while removing duplicates." ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{'Albert', 'Ella', 'George', 'Salil'}\n" ] } ], "source": [ "names = ['salil', 'ALBERT', 'Ella', 'george', 'Salil', 'George', 'ELLA', 'Albert']\n", "names_set = {n.capitalize() for n in names}\n", "print(names_set)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And it's easy to convert this back to a list." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "['Albert', 'Ella', 'George', 'Salil']\n" ] } ], "source": [ "names_set = list({n.capitalize() for n in names})\n", "print(names_set)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Get Car Make from list of Make & Model\n", "We're getting the first word from each string." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{'Toyota', 'Tesla', 'Chevy'}\n" ] } ], "source": [ "cars = ['Toyota Prius', 'Chevy Bolt', 'Tesla Model 3', 'Tesla Model Y']\n", "makes = {(c.split()[0]) for c in cars}\n", "print(makes)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Get Initials from Names\n", "Take first and last initials" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{'CB', 'NF', 'HP'}\n" ] } ], "source": [ "names = ['Clint Barton', 'Tony', 'Nick Fury', 'Hank Pym']\n", "inits = {(n.split()[0][0] + n.split()[1][0]) for n in names if len(n.split())==2}\n", "print(inits)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.0" } }, "nbformat": 4, "nbformat_minor": 2 }