Join 25,000+ aspiring Data Scientists and receive Python & Data Science tips every Tuesday!

Published 3 months agoΒ β’Β 3 min read

Hi Reader,

Thanks for sticking with me through all of those Black Friday emails! π

Seriously, though, I'm glad you're still here! π

Now it's time to get back to the tips! π

βVisual Anagramsβ

This is a collection of "multi-view" optical illusions generated by diffusion models (similar to DALL-E and Stable Diffusion). **I can't get over how good these are**, and I'd encourage you to spend a few minutes checking them out!

There's also a research paper explaining how these were constructed, as well as a Colab notebook you can use to create your own!

On Friday, I was working on a problem from the Python Problem-Solving Bootcamp that I talked about last week.

The problem boils down to this:

You have a text file containing 2000 numbers (one per line). If you walk through them in order, **how many times is the current number greater than the previous number?**

For example, if the first 8 numbers looked like this...

118, 121, 123, 125, 134, 132, 137, 135

...the answer would be **5**, since the value increases 5 times (and decreases 2 times) when walking through the numbers from left to right.

**How would YOU solve this problem with code?** Give it some thought, and then keep scrolling...

The first step is to read in the data. I used a context manager (the **with** block) to ensure that the file would automatically be closed.

Within the block, I used a list comprehension to read in the file line-by-line and convert each number (which was originally a string) into an integer:

We can slice the resulting list to view the first 8 elements, and also confirm the length of the list:

Now we're ready to solve the problem!

Here's the solution that I came up with:

How does this work?

- I set
**count**to zero, which tracks the number of times the value increases. - I set
**previous**to be the first element in the**nums**list. - The for loop iterates through
**nums**, starting with the second element since we don't need to compare the first element to itself. -
During each iteration:
- The
**count**is incremented if the**current**number is greater than the**previous**number. - The
**current**number becomes the**previous**number.

- The

The resulting **count** is 1553, which turns out to be correct.

I think this is a reasonable and readable solution. However, the solution notebook (provided by the bootcamp) reminded me of **three great Python tricks** I could have used to write a more elegant solution!

**I'll teach you those tricks below...** π

This solution uses **zip** to avoid manually assigning **current** to **previous** at the end of each **for** loop iteration:

If you're not familiar with zip, it aggregates the elements from multiple iterables and returns an iterator of tuples.

In simpler language, **zip** pairs together elements from different objects so that you can work with them at the same time.

In this case, we're pairing together the **nums** list (starting with element 0) and the **nums** list (starting with element 1), and then unpacking each pair of elements into **previous** and **current** during each iteration of the **for** loop.

This solution removes the conditional statement from the **for** loop:

How does this work?

- The
**current > previous**comparison returns a boolean value (either**True**or**False**) -
When you try to do math with a boolean value,
**True**gets converted to 1 and**False**gets converted to 0. Thus:**count += True**evaluates to**count += 1****count += False**evaluates to**count += 0**.

Finally, we can rewrite the solution even more concisely:

This converts the previous solution into a generator expression, which is like a list comprehension that is lazily evaluated.

Then, we pass the generator object to the **sum** function, which adds up all of the **True** values (by converting them to ones).

My Python course includes 9 sets of exercises and a 7-part project. It's great for beginners and intermediate users alike.

*Feel free to get in touch if you're wondering if it's right for you!*

**If you enjoyed this weekβs tip, please forward it to a friend!** Takes only a few seconds, and it really helps me reach more people! π

See you next Tuesday!

- Kevin

P.S. I'll give you 20 seconds to guess what this video is about (YouTube)

*Did someone awesome forward you this email? **Sign up here to receive Data Science tips every week**!*

Kevin Markham

Join 25,000+ aspiring Data Scientists and receive Python & Data Science tips every Tuesday!

Read more from Learn Data Science from Data School π

Hi Reader, Do any of these sound like you? You're new to the pandas library and you want to learn the fundamentals You have some experience with pandas, but you want to fill in the gaps in your knowledge You want to learn the best practices for data analysis with pandas in 2024 If so, you should enroll in my FREE course (launching today!), pandas in 30 days. Why learn pandas? pandas is a powerful, open source Python library for data analysis, manipulation, and visualization. If you're working...

9 days agoΒ β’Β 1 min read

Hi Reader, There's a gift for you somewhere in this email... just look for the π emoji! Tip #39: Six quick Python tricks Here's what I'll cover below: Return the number of unique values Count values with Counter Better debugging with f-strings Return multiple values from a function Count while looping Create a dictionary with a comprehension Let's get started! π 1οΈβ£ Return the number of unique values Need to know the number of unique values in an iterable? Convert it to a set and check the...

16 days agoΒ β’Β 2 min read

Hi Reader, My goal with Tuesday Tips is to help you get better at Data Science every week. Is there anything that would make these tips even more helpful for you? Let me know! π¬ You can find past tips at tuesday.tips. (Yes, thatβs a real URL!) Tip #38: Five ways to rename your DataFrame columns Let's say that we have a simple pandas DataFrame: I prefer to use dot notation to select pandas columns, but that won't work since the column names have spaces. Let's fix this! The most flexible method...

23 days agoΒ β’Β 1 min read