summaryrefslogtreecommitdiff
path: root/advanced_python
diff options
context:
space:
mode:
authorPrabhu Ramachandran2018-05-19 01:58:42 +0530
committerPrabhu Ramachandran2018-05-19 01:58:42 +0530
commit93e8e112a67dd1122fd7aaffdb044a202fe80107 (patch)
tree79dbf1c7318b6cc634db53f91f913f2eca01d670 /advanced_python
parentfb7c35882bdf2b611a28449b2f27ed2b289803e2 (diff)
downloadpython-workshops-93e8e112a67dd1122fd7aaffdb044a202fe80107.tar.gz
python-workshops-93e8e112a67dd1122fd7aaffdb044a202fe80107.tar.bz2
python-workshops-93e8e112a67dd1122fd7aaffdb044a202fe80107.zip
Adding material in list/dict comprehension.
Diffstat (limited to 'advanced_python')
-rw-r--r--advanced_python/17_list_comprehensions.ipyml228
1 files changed, 228 insertions, 0 deletions
diff --git a/advanced_python/17_list_comprehensions.ipyml b/advanced_python/17_list_comprehensions.ipyml
new file mode 100644
index 0000000..a300331
--- /dev/null
+++ b/advanced_python/17_list_comprehensions.ipyml
@@ -0,0 +1,228 @@
+cells:
+
+- markdown: |
+ # Advanced Python: List/dict comprehensions, generator expressions
+
+ ### Prabhu Ramachandran
+ ### The FOSSEE Python group &
+ ### Department of Aerospace Engineering
+ ### IIT Bombay
+
+ metadata:
+ slideshow:
+ slide_type: slide
+
+- markdown: |
+ ## Introduction
+
+ - A convenient way to quickly create lists
+ - Lets say we have the following
+
+ metadata:
+ slideshow:
+ slide_type: slide
+
+- code: |
+ sqr = []
+ for i in range(5):
+ sqr.append(i*i)
+
+- markdown: |
+ Is done easily with the following
+
+- code: |
+ sqr = [i*i for i in range(5)]
+ sqr
+
+ metadata:
+ slideshow:
+ slide_type: fragment
+
+
+- markdown: |
+ ## More examples
+
+ - Concise, readable, and quick
+
+ metadata:
+ slideshow:
+ slide_type: slide
+
+- code: |
+ [2*x + 1 for x in range(5)]
+
+- code: |
+ data = [-1, -2, 3, 4]
+ [abs(x) for x in data]
+
+- code: |
+ names = ['Amar', 'Akbar', 'Antony']
+ [x.upper() for x in names]
+
+- code: |
+ [(len(x), x) for x in names]
+
+- markdown: |
+ ## Filtering elements
+
+ - Filter elements using `if` clauses
+
+ metadata:
+ slideshow:
+ slide_type: slide
+
+- code: |
+ data = [-1, -2, 3, 4]
+ positive = [x for x in data if x > 0]
+ positive
+
+- code: |
+ not_in_data = [x for x in range(-2, 5) if x not in data]
+ not_in_data
+
+
+- markdown: |
+ ## More complex comprehensions
+
+ - One can have many `for` and `if` clauses
+
+ metadata:
+ slideshow:
+ slide_type: slide
+
+- code: |
+ [(i, j) for i in range(3) for j in range(2)]
+
+- code: |
+ [(i, j) for i in range(3) for j in range(2) if i > j]
+- code: |
+ [(i, j) for i in range(4) if i%2 for j in range(4) if i > j]
+
+- code: |
+ [(i, j) for i in range(4) if i%2 for j in range(4) if (i > j or j%2)]
+- code: |
+ [(i, j) for i in range(4) if i%2 for j in range(4) if i > j if j%2]
+
+- markdown: |
+ ## Observations
+
+ - Powerful and convenient.
+ - Can supply multiple `for` and `if` clauses
+ - Always create lists
+ <br/>
+ <br/>
+ - What if we want a generator?
+
+ metadata:
+ slideshow:
+ slide_type: slide
+
+- markdown: |
+ ## Generator expressions
+
+ - Like list comprehensions but:
+ - do not create lists
+ - and create a generator
+ - Values are generated when needed
+ - Memory efficient
+
+ metadata:
+ slideshow:
+ slide_type: slide
+
+- code: |
+ (i*i for i in range(5))
+
+- code: |
+ sum(i*i for i in range(5))
+
+ metadata:
+ slideshow:
+ slide_type: fragment
+
+- code: |
+ from math import sin
+ max(sin(x) for x in range(10))
+
+ metadata:
+ slideshow:
+ slide_type: fragment
+
+- markdown: |
+ ## More examples
+
+ - `zip` is a handy function
+
+ metadata:
+ slideshow:
+ slide_type: slide
+
+- code: |
+ a = [1.0, 2.0, 3.1]
+ b = [-1.5, -1.0, -0.5]
+ zip(a, b)
+
+- code: |
+ list(zip(a, b))
+
+- code: |
+ list(zip('hello', 'world'))
+
+- code: |
+ list(zip(range(5), 'hello'))
+
+- code: |
+ sum(x*y for x, y in zip(a, b))
+
+- markdown: |
+ ## Dictionary comprehensions
+
+ - Similar to list comprehensions
+ - Creates a dictionary easily
+
+ metadata:
+ slideshow:
+ slide_type: slide
+
+- code: |
+ {x: len(x) for x in ('cat', 'dog', 'mouse')}
+
+- code: |
+ {x: x%2 == 0 for x in range(0, 5)}
+
+- markdown: |
+ ## Summary
+
+ - List comprehensions
+ - Generator expressions
+ - Dictionary comprehensions
+ - The `zip` builtin
+
+ metadata:
+ slideshow:
+ slide_type: slide
+
+
+
+# The lines below here may be deleted if you do not need them.
+# ---------------------------------------------------------------------------
+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.6.0
+ rise:
+ scroll: true
+ transition: none
+nbformat: 4
+nbformat_minor: 2