Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added a List Comprehension topic #34

Open
wants to merge 6 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions basics/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ to learn more about whatever you want after studying it.
19. [Exceptions](exceptions.md)
20. [Classes](classes.md)
21. [Docstrings](docstrings.md)
22. [List Comprehension](list-comprehension.md)
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It would be good to have this immediately after loops. (You have to change the numbering.)


***

Expand Down
77 changes: 77 additions & 0 deletions basics/list-comprehension.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
# List Comprehension


## Definition
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This doesn't have to be under a second title.

Suggested change
## Definition

List comprehensions creates a new list from an existing list that is a shorter syntax than normal. It also processes the list much faster than using a for loop.
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • "Shorter than normal" is a bit ambiguous.
  • When performance matters, performance problems don't usually come from small things like this, in my experience. Not really worth mentioning.
Suggested change
List comprehensions creates a new list from an existing list that is a shorter syntax than normal. It also processes the list much faster than using a for loop.
List comprehensions creates a new list from an existing list using shorter syntax than loops.



## Without List Comprehension
```python
animals = ["dog", "cat", "giraffe", "donkey", "ape"]
arr = []

for i in animals:
Comment on lines +11 to +13
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Consider improving the variable names, e.g. arr --> filtered_animals, i --> animal, also in the list comprehension below.

if len(i) == 3:
arr.append(i)

print(arr)
```
```python
['dog', 'cat', 'ape']
Comment on lines +17 to +20
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It would be good to show the output right at the print statement, so it is clear that it comes from print(arr). It matters more when there's multiple prints, but I think it helps here too.

Suggested change
print(arr)
```
```python
['dog', 'cat', 'ape']
print(arr) # Prints: ['dog', 'cat', 'ape']

```
The example above shows a list of animals and the for loop iterates through the list of animals and the if statement filters the list and only adds the animal if their name is exactly 3 characters long.

## With List Comprehension
```python
animals = ["dog", "cat", "giraffe", "donkey", "ape"]

arr = [i for i in animals if len(i) == 3]
print(arr)
```
```python
['dog', 'cat', 'ape']
```
The example above does exactly the same thing but is in a much more concise syntax where it iterates through the list of animals and appends to the new list if their name is exactly 3 characters long.

## Syntax
Copy link
Owner

@Akuli Akuli Dec 3, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What's the purpose of this section? Reading a description of syntax isn't a good way to learn, in my experience. It would be better to just show the i.lower() example, without trying to describe the syntax with words too much.


newlist = [**expression** for **item** in **iterable** if **condition**]
This is the usual form in which list comprehension is used.

**Expression:** It is the current item for each iteration but also serves as the outcome which can be manipulated before it becomes added to the new list.
```python
animals = ["DOG", "CAT", "GIRAFFE", "DONKEY", "APE"]

arr = [i.lower() for i in animals if len(i) == 3]
print(arr)
```
```python
['dog', 'cat', 'ape']
```
The **i** is essentially the **item** which is an animal in each iteration where it checks if the animal's name is 3 characters long and if it does it **also** changes that animal name to all lower case before it finally appends or adds it to the list.

**Iterable:** The iterable is the object that is being iterated over and can be any iterable object such as a set, list, tuple etc.
```python
arr = [i for i in range(5)]
print(arr)
```
```python
[0, 1, 2, 3, 4]
```
This essentially adds 0 to 4 to the new array with range(5).

**Condition** The condition is a sort of filter that is specified to get the specific data that is wanted.
```python
arr = [i for i in range(10) if i < 5]
print(arr)
```
```python
[0, 1, 2, 3, 4]
```
For this example the condition is that only the numbers that is less than 5 would get put into the array.

## Summary
- List comprehensions are a good way to shorten code
- They are versatile when it comes to iterating through iterable datasets
- Not only can you filter out data with a condition you can also change the data before it gets added to the new list
- List comprehensions normally follow: newlist = [**expression** for **item** in **iterable** if **condition**]
Comment on lines +74 to +77
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Add . to the end of each. Also consider removing the last item, if you remove the ## Syntax section.