In Python, the itertools module is a powerhouse for creating efficient iterators that handle combinatorial, grouping, and infinite sequence operations—essential for acing coding interviews with elegant solutions! 🌪
By: @DataScienceQ⭐️
#Python #CodingInterview #itertools #DataStructures #Algorithm #Programming #TechJobs #LeetCode #DeveloperTips #CareerGrowth
import itertools
# Infinite iterators - Handle streams with precision
count = itertools.count(start=10, step=2)
print(list(itertools.islice(count, 3))) # Output: [10, 12, 14]
cycle = itertools.cycle('AB')
print(list(itertools.islice(cycle, 4))) # Output: ['A', 'B', 'A', 'B']
repeat = itertools.repeat('Hello', 3)
print(list(repeat)) # Output: ['Hello', 'Hello', 'Hello']
# Combinatorics made easy - Solve permutation puzzles
print(list(itertools.permutations('ABC', 2)))
# Output: [('A','B'), ('A','C'), ('B','A'), ('B','C'), ('C','A'), ('C','B')]
print(list(itertools.combinations('ABC', 2)))
# Output: [('A','B'), ('A','C'), ('B','C')]
print(list(itertools.combinations_with_replacement('AB', 2)))
# Output: [('A','A'), ('A','B'), ('B','B')]
# Cartesian products - Matrix operations simplified
print(list(itertools.product([1,2], ['a','b'])))
# Output: [(1,'a'), (1,'b'), (2,'a'), (2,'b')]
# Practical use: Generate all possible IP octets
octets = [str(i) for i in range(256)]
ips = itertools.product(octets, repeat=4)
print('.'.join(next(ips))) # Output: 0.0.0.0
# Grouping consecutive duplicates - Log analysis superpower
data = 'AAAABBBCCDAA'
groups = [list(g) for k, g in itertools.groupby(data)]
print([k + str(len(g)) for k, g in itertools.groupby(data)])
# Output: ['A4', 'B3', 'C2', 'D1', 'A2']
# Real-world application: Compress sensor data streams
sensor_data = [1,1,1,2,2,3,3,3,3]
compressed = [(k, len(list(g))) for k, g in itertools.groupby(sensor_data)]
print(compressed) # Output: [(1,3), (2,2), (3,4)]
# Chaining multiple iterables - Database query optimization
list1 = [1,2,3]
list2 = ['a','b','c']
chained = itertools.chain(list1, list2)
print(list(chained)) # Output: [1,2,3,'a','b','c']
# Memory-efficient merging of large files
def merge_files(*filenames):
return itertools.chain.from_iterable(open(f) for f in filenames)
# Slicing iterators like lists - Pagination made easy
numbers = itertools.islice(range(100), 5, 15, 2)
print(list(numbers)) # Output: [5,7,9,11,13]
# Interview favorite: Generate Fibonacci with islice
def fib():
a, b = 0, 1
while True:
yield a
a, b = b, a+b
print(list(itertools.islice(fib(), 10))) # Output: [0,1,1,2,3,5,8,13,21,34]
# tee iterator - Process data in parallel pipelines
data = [1,2,3,4]
iter1, iter2 = itertools.tee(data, 2)
print(sum(iter1), max(iter2)) # Output: 10 4
# Warning: Consume original iterator immediately!
original = iter([1,2,3])
t1, t2 = itertools.tee(original)
print(list(t1), list(t2)) # Output: [1,2,3] [1,2,3]
# Interview Gold: Find all subsets (power set)
def powerset(iterable):
s = list(iterable)
return itertools.chain.from_iterable(
itertools.combinations(s, r) for r in range(len(s)+1)
)
print(list(powerset('ABC')))
# Output: [(), ('A',), ('B',), ('C',), ('A','B'), ('A','C'), ('B','C'), ('A','B','C')]
# Interview Gold: Solve "Word Break" problem
def word_break(s, word_dict):
dp = [False] * (len(s)+1)
dp[0] = True
for i in range(1, len(s)+1):
for j in range(i):
if dp[j] and s[j:i] in word_dict:
dp[i] = True
break
return dp[-1]
print(word_break("leetcode", {"leet", "code"})) # Output: True
# Pro Tip: Memory-efficient large data processing
with open('huge_file.txt') as f:
# Process 1000-line chunks without loading entire file
for chunk in iter(lambda: list(itertools.islice(f, 1000)), []):
process(chunk)
By: @DataScienceQ
#Python #CodingInterview #itertools #DataStructures #Algorithm #Programming #TechJobs #LeetCode #DeveloperTips #CareerGrowth
Please open Telegram to view this post
VIEW IN TELEGRAM
Python tip:
itertools.zip_longest pairs elements from multiple iterables, but unlike the built-in
While
Example👇
#Python #ProgrammingTips #Itertools #PythonTips #CleanCode
━━━━━━━━━━━━━━━
By: @DataScienceQ ✨
itertools.zip_longest pairs elements from multiple iterables, but unlike the built-in
zip(), it continues until the longest iterable is exhausted, padding shorter ones with a specified fillvalue.While
zip() truncates its output to the length of the shortest input, zip_longest() ensures no data is lost from longer inputs by substituting None (or a custom value) for missing items.Example👇
>>> import itertools
>>> students = ['Alice', 'Bob', 'Charlie', 'David']
>>> scores = [88, 92, 75]
>>> grades = list(itertools.zip_longest(students, scores, fillvalue='Absent'))
grades
[('Alice', 88), ('Bob', 92), ('Charlie', 75), ('David', 'Absent')]
#Python #ProgrammingTips #Itertools #PythonTips #CleanCode
━━━━━━━━━━━━━━━
By: @DataScienceQ ✨
❤1