Files
Python/Python Set Comprehensions.ipynb

332 lines
6.4 KiB
Plaintext
Raw Permalink Normal View History

2020-05-25 17:45:08 -07:00
{
"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
}