Following up from my previous thread, let's continue taking a look at some additional itertools methods

Some of them, as you will see, have very similar built-in versions but the key here is: itertools works on iterables and generators that are lazy evaluated collections

1/14🧵
One example is the method islice. It does slicing but for iterables (potentially endless collections). The main difference is that it doesn't accept negative indexes like regular slicing.

numbers = range(10)
items = it.islice(numbers, 2, 4)
>>> [2, 3]

2/14🧵
zip_longest vs zip
both do the same thing: aggregates elements from multiple iterators.

The difference is that zip_longest aggregates until the longest iterator ends while zip stops on the shortest one.

It will fill the missing values with any value you want

3/14🧵
starmap vs map:
Use elements of a collection as parameters for a function

starmap is a little bit smarter as it can use multiple parameters on tuples:

b = [2, 3, 10]
exp = [5, 5, 5]
z = zip(b, exp)
it.starmap(pow, z) == map(lambda x, y: pow(x, y), b, exp)

4/14🧵
filterfalse vs filter: they do the complementary task of each other

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
it.filterfalse(lambda x: x%2, numbers) == filter(lambda x: not (x%2), numbers)

5/14🧵
Talking about complementary methods, itertools have dropwhile and takewhile

Given a predicate, they drop or take all elements while true:

it.takewhile(lambda n: n < 4, range(10))
>>> 0,1,2,3

it.dropwhile(lambda n: n < 4, range(10))
>>> 4,5,6,7,8,9

6/14🧵
The accumulate function returns an accumulated result based on a function. The default is a sum:

numbers = range(5) # [0, 1, 2, 3, 4]
it.accumulate(numbers)
>>> 0, 1, 3, 6, 10

letters = ['a', 'b', 'c']
it.accumulate(letters)
>>> a, ab, abc

7/14🧵
If you want to iterate over multiple iterators, one after the other, you can use the chain method:

ls = it.repeat('a', 3) # ['a', 'a', 'a']
ns = range(5) # [0, 1, 2, 3, 4]
it.chain(ls, ns)
>>> a, a, a, 0, 1, 2, 3, 4

8/14🧵
Sometimes you want to remove items from a list based on a mask (called selector). That's where the compress method comes in:

letters = ['a', 'b', 'c', 'd', 'e', 'f']
it.compress(letters, [1, 0, 1, 0, 1])
>>> a, c, e

9/14🧵
Imagine you need to iterate over the same iterator multiple times, you can make independent copies of them using the tee method.

it1, it2 = it.tee(range(5))
It1 -> [0, 1, 2, 3, 4]
It2 -> [0, 1, 2, 3, 4]

10/14🧵
If you know a little bit of SQL, you know about the GROUP BY statement. Itertools has a similar function but with some caveats!

word = 'aabbbnnnaa'
it.groupby(word)
>>> a ['a','a']
>>> b ['b', 'b','b']
>>> a ['a','a']

11/14🧵
💡: The main difference between itertools version from the SQL version is that it won't group elements if they are out of order. It will create different groups instead.

12/14🧵
I've talked about some other itertools methods here:



13/14🧵
I hope this was helpful, some of these methods are very helpful and knowing they exist can make your life easier.

I'll keep posting the text version of the code to make your life easier to try it out

I'm learning a lot with these threads, I hope you are too!

14/14🧵

• • •

Missing some Tweet in this thread? You can try to force a refresh
 

Keep Current with Luiz GUStavo 💉💉🎉

Luiz GUStavo 💉💉🎉 Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

PDF

Twitter may remove this content at anytime! Save it as PDF for later use!

Try unrolling a thread yourself!

how to unroll video
  1. Follow @ThreadReaderApp to mention us!

  2. From a Twitter thread mention us with a keyword "unroll"
@threadreaderapp unroll

Practice here first or read more on our help page!

More from @gusthema

18 Jun
This week I've been posting about the itertools Python🐍 module.

If you want to improve your coding skills, one way is adding new tools to your toolbox

Itertools enables you to solve problems that would otherwise be absurdly hard to solve.

[2min]

1/7🧵
After you've learned the basic of Python, I'd suggest you go deeper in the collections manipulation:

• Slicing
• Comprehension
• Generators
• Iterators
• Itertools
• map/filter/zip

I've posted about all this content in the past, I can revisit if you'd like

2/7🧵
This week I've explained all functions on the itertools module

Starting by the basic ones:

3/7🧵
Read 7 tweets
17 Jun
Generating combinations and permutations is usually a tricky task in programming.

In Python 🐍, using the itertools library this becomes much easier, less memory intensive and faster!

Let me tell you what I learned with them

[4.45 min]

1/13🧵
Let's suppose you want to create all possible cards of a regular deck. What you have to do is to join:

• All cards ranks: A, 2 to 10, J, Q and K
• The 4 suits: ♥️♣️♦️♠️

How to generate all cards?

2/13🧵
The operation that can solve this is a cartesian product:

ranks = ['A'] + list(range(2, 11)) + ['J', 'Q', 'K']
suits = ['♥️', '♣️', '♦️', '♠️']

all_cards = it.product(suits, ranks)
>>> ('A', '♥️'),('A', '♣️'),('A', '♦️'),('A', '♠️'),...
len(all_cards)
>>> 52

3/13🧵
Read 13 tweets
9 Jun
Quick⚡️ Python🐍 trick:
How do you merge two dictionaries?

[55 sec]🤯

1/6🧵
For Python 3.5 and up you can do:

d1 = {"a":1, "b":2}
d2 = {"c":3, "d":4}
d3 = {**d1, **d2}
d3 == {"a": 1, "b": 2, "c":3, "d":4}

Why?

2/6🧵
The ** operator expands the collection, so, you can think it as this:

d1 = {"a":1, "b":2}
d2 = {"c":3, "d":4}
d3 = {**d1, **d2} -> {"a":1, "b":2, "c":3, "d":4}
d3 == {"a": 1, "b": 2, "c":3, "d":4}

3/6🧵
Read 6 tweets
8 Jun
I was telling a friend that one cool feature from Python is list slice notation

So instead of just posting the link I decided to do a brief explanation.

[5 min]

Python's regular array indexing as in multiple languages is: a[index]

a = [0, 1, 2, 3, 4]
a[0] == 0

1/12🧵
Python has negative indexing too:

a = [0, 1, 2, 3, 4]
a[-1] == 4
a[-2] == 3

2/12🧵
Python also enables creating sub-lists from a list, or a slice:

-> a[start_index:last_index]

a = [0, 1, 2, 3, 4]
a[1:3] == [1, 2]

start_index is inclusive
last_index is exclusive

3/12🧵
Read 12 tweets
30 May
I've been trying the new TensorFlow Decision Forest (TF-DF) library today and it's very good!

Not only the ease of use but also all the available metadata, documentation and integrations you get!

Let me show you some of the cool things I've learned so far...

[5 min]

1/11🧵
TensorFlow Decision Forests have implemented 3 algorithms:

• CART
• Random Forest
• Gradient Boosted Trees

You can get this list with tfdf.keras.get_all_models()

All of them enable Classification, Regression and Ranking Tasks

2/11🧵
CART or Classification and Regression Trees is a simple decision tree. 🌳

The process divides the dataset in two parts
The first is used to grow the tree while the second is used to prune the tree

This is a good basic algorithm to learn and understand Decision Trees

3/11🧵
Read 11 tweets
29 May
Machine learning goes beyond Deep Learning and Neural Networks

Sometimes a simpler technique might give you better results and be easier to understand

A very versatile algorithm is the Decision Forest
🌴🌲🌳?

What is it and how does it work?
Let me tell you..

[7 min]

1/10🧵
Before understanding a Forest, let's start by what's a Tree

Imagine you have a table of data of characteristics of Felines. With features like size, weight, color, habitat and a column with the labels like lion, tiger, house cat, lynx and so on.

2/10🧵
With some time, you could write a code based on if/else statements that could, for each a row in the table, decide which feline it is

This is exactly what a Decision Tree does
During its training it creates the if/elses

en.wikipedia.org/wiki/Decision_…

3/10🧵
Read 10 tweets

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just two indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3/month or $30/year) and get exclusive features!

Become Premium

Too expensive? Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal Become our Patreon

Thank you for your support!

Follow Us on Twitter!

:(