Learn Data Science from Data School 📊

Tuesday Tip #33: Three useful Python tricks 🐍

Published 6 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! 🎓

🔗 Link of the week

​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!

👉 Tip #33: Learn 3 Python tricks in 3 minutes

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...

Read in the data

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!

My solution

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 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... 👇

Python trick #1: Pair iterables with zip

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.

Python trick #2: Convert booleans to integers

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.

Python trick #3: Use a generator expression

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).

Want more Python practice?

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!

Learn Data Science from Data School 📊

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, I'm really proud of this week's tip because it covers a topic (data leakage) that took me years to fully understand. 🧠 It's one of those times when I feel like I'm truly contributing to the collective wisdom by distilling complex ideas into an approachable format. 💡 You can read the tip below 👇 or on my blog. 🔗 Link of the week Building an AI Coach to Help Tame My Monkey Mind (Eugene Yan) In this short post, Eugene describes his experiences calling an LLM on the phone for coaching:...

28 days ago • 4 min read

Hi Reader, Last week, I recorded the FINAL 28 LESSONS 🎉 for my upcoming course, Master Machine Learning with scikit-learn. That's why you didn't hear from me last week! 😅 I edited one of those 28 videos and posted it on YouTube. That video is today's tip, which I'll tell you about below! 👉 Tip #45: How to read the scikit-learn documentation In order to become truly proficient with scikit-learn, you need to be able to read the documentation. In this video lesson, I’ll walk you through the five...

about 1 month ago • 1 min read

Hi Reader, happy Tuesday! My recent tips have been rather lengthy, so I'm going to mix it up with some shorter tips (like today's). Let me know what you think! 💬 🔗 Link of the week A stealth attack came close to compromising the world's computers (The Economist) If you haven't heard about the recent "xz Utils backdoor", it's an absolutely fascinating/terrifying story! In short, a hacker (or team of hackers) spent years gaining the trust of an open-source project by making helpful...

about 2 months ago • 1 min read
Share this post