Skip to content

Instantly share code, notes, and snippets.

@Lucs1590
Created February 17, 2022 12:53
Show Gist options
  • Save Lucs1590/393c7717fff44108e61d6f292f78798a to your computer and use it in GitHub Desktop.
Save Lucs1590/393c7717fff44108e61d6f292f78798a to your computer and use it in GitHub Desktop.
Gist snippet with popular itertools usage.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [],
"source": [
"import itertools\n",
"import matplotlib.pyplot as plt\n",
"import seaborn as sns\n",
"import numpy as np\n",
"import string"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"def fibonacci(n):\n",
" if n < 0:\n",
" print(\"Incorrect input\")\n",
" elif n == 0:\n",
" return 0\n",
" elif n == 1 or n == 2:\n",
" return 1\n",
" else:\n",
" return fibonacci(n-1) + fibonacci(n-2)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[0, 1, 1, 2, 3, 5, 8]"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"fibolist = [fibonacci(x) for x in range(7)]\n",
"fibolist"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# cycle & islice"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[0, 1, 1, 2, 3, 5, 8, 0, 1, 1, 2, 3, 5, 8, 0, 1, 1, 2, 3, 5, 8, 0, 1, 1, 2, 3, 5, 8, 0, 1, 1, 2, 3, 5, 8]\n"
]
},
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x7f89daf72610>"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# itertools.islice(iterable, start, stop, step)\n",
"# intertools.cycle(iterable)\n",
"data = list(\n",
" itertools.islice(\n",
" itertools.cycle(fibolist),\n",
" 0,\n",
" 35\n",
" )\n",
")\n",
"\n",
"print(data)\n",
"sns.lineplot(x=range(len(data)), y=data)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# combinations"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[(0, 1), (0, 1), (0, 2), (0, 3), (0, 5), (0, 8), (1, 1), (1, 2), (1, 3), (1, 5), (1, 8), (1, 2), (1, 3), (1, 5), (1, 8), (2, 3), (2, 5), (2, 8), (3, 5), (3, 8), (5, 8)]\n"
]
}
],
"source": [
"# itertools.combinations(iterable, variations)\n",
"print(list(itertools.combinations(fibolist, 2)))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# product"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[('Ace', 'Hearts'), ('Ace', 'Diamonds'), ('Ace', 'Clubs'), ('Ace', 'Spades'), ('2', 'Hearts'), ('2', 'Diamonds'), ('2', 'Clubs'), ('2', 'Spades'), ('3', 'Hearts'), ('3', 'Diamonds'), ('3', 'Clubs'), ('3', 'Spades'), ('4', 'Hearts'), ('4', 'Diamonds'), ('4', 'Clubs'), ('4', 'Spades'), ('5', 'Hearts'), ('5', 'Diamonds'), ('5', 'Clubs'), ('5', 'Spades'), ('6', 'Hearts'), ('6', 'Diamonds'), ('6', 'Clubs'), ('6', 'Spades'), ('7', 'Hearts'), ('7', 'Diamonds'), ('7', 'Clubs'), ('7', 'Spades'), ('8', 'Hearts'), ('8', 'Diamonds'), ('8', 'Clubs'), ('8', 'Spades'), ('9', 'Hearts'), ('9', 'Diamonds'), ('9', 'Clubs'), ('9', 'Spades'), ('10', 'Hearts'), ('10', 'Diamonds'), ('10', 'Clubs'), ('10', 'Spades'), ('Jack', 'Hearts'), ('Jack', 'Diamonds'), ('Jack', 'Clubs'), ('Jack', 'Spades'), ('Queen', 'Hearts'), ('Queen', 'Diamonds'), ('Queen', 'Clubs'), ('Queen', 'Spades'), ('King', 'Hearts'), ('King', 'Diamonds'), ('King', 'Clubs'), ('King', 'Spades')]\n"
]
}
],
"source": [
"# itertools.product(*iterables)\n",
"values = [\"Ace\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"Jack\", \"Queen\", \"King\"]\n",
"suits = [\"Hearts\", \"Diamonds\", \"Clubs\", \"Spades\"]\n",
"print(list(itertools.product(values, suits)))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# compress"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"['a', 'd', 'g', 'j', 'm', 'p', 's', 'v', 'y']\n"
]
}
],
"source": [
"# itertools.compress(iterables, selector)\n",
"# itertools.count(start=0, step=1)\n",
"print(list(\n",
" itertools.compress(\n",
" string.ascii_lowercase,\n",
" itertools.cycle([1, 0, 0])\n",
" )\n",
"))"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"['a', 'd', 'g', 'j', 'm', 'p', 's', 'v', 'y']\n"
]
}
],
"source": [
"print(list(\n",
" itertools.compress(\n",
" string.ascii_lowercase,\n",
" map(lambda x: x % 3 == 0, itertools.count())\n",
" )\n",
"))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# accumulate"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711, 28657, 46368]\n",
"[0, 1, 2, 4, 7, 12, 20, 33, 54, 88, 143, 232, 376, 609, 986, 1596, 2583, 4180, 6764, 10945, 17710, 28656, 46367, 75024, 121392]\n"
]
}
],
"source": [
"# itertools.accumulate(iterable[, func])\n",
"# apply func in the result of the last iteration\n",
"fibolist = [fibonacci(x) for x in range(25)]\n",
"cumulative_list = list(itertools.accumulate(fibolist))\n",
"print(fibolist)\n",
"print(cumulative_list)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# repeat"
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'Hearts': 'Default',\n",
" 'Diamonds': 'Default',\n",
" 'Clubs': 'Default',\n",
" 'Spades': 'Default'}"
]
},
"execution_count": 40,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# itertools.repeat(value)\n",
"suits_dict = dict(zip(suits, itertools.repeat(\"Default\")))\n",
"suits_dict"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# starmap"
]
},
{
"cell_type": "code",
"execution_count": 52,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x7f89da6f3090>"
]
},
"execution_count": 52,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# itertools.starmap(function, iterable)\n",
"ages = [(22,23),(50,40),(23,22),(30,19)]\n",
"diffs = list(\n",
" itertools.starmap(\n",
" np.subtract,\n",
" ages\n",
" )\n",
")\n",
"data = {\"x\": list(range(len(diffs))), \"y\": diffs}\n",
"sns.barplot(data=data, x=\"x\", y=\"y\")"
]
},
{
"cell_type": "code",
"execution_count": 53,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x7f89daf72950>"
]
},
"execution_count": 53,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"x = np.linspace(0, 10, 100)\n",
"y = np.sin(x) \n",
"diffs = list(itertools.starmap(lambda x, y: (x-y)/0.1, zip(y[1:], y[:-1]))) # this list is one shorter than the original list\n",
"sns.lineplot(x=x, y=y)\n",
"sns.lineplot(x=x[:-1], y=diffs)"
]
}
],
"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.6"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment