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
In Python, NumPy is the cornerstone of scientific computing, offering high-performance multidimensional arrays and tools for working with them—critical for data science interviews and real-world applications! 📊
By: @DataScienceQ 🚀
#Python #NumPy #DataScience #CodingInterview #MachineLearning #ScientificComputing #DataAnalysis #Programming #TechJobs #DeveloperTips
import numpy as np
# Array Creation - The foundation of NumPy
arr = np.array([1, 2, 3])
zeros = np.zeros((2, 3)) # 2x3 matrix of zeros
ones = np.ones((2, 2), dtype=int) # Integer matrix
arange = np.arange(0, 10, 2) # [0 2 4 6 8]
linspace = np.linspace(0, 1, 5) # [0. 0.25 0.5 0.75 1. ]
print(linspace)
# Array Attributes - Master your data's structure
matrix = np.array([[1, 2, 3], [4, 5, 6]])
print(matrix.shape) # Output: (2, 3)
print(matrix.ndim) # Output: 2
print(matrix.dtype) # Output: int64
print(matrix.size) # Output: 6
# Indexing & Slicing - Precision data access
data = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(data[1, 2]) # Output: 6 (row 1, col 2)
print(data[0:2, 1:3]) # Output: [[2 3], [5 6]]
print(data[:, -1]) # Output: [3 6 9] (last column)
# Reshaping Arrays - Transform dimensions effortlessly
flat = np.arange(6)
reshaped = flat.reshape(2, 3)
raveled = reshaped.ravel()
print(reshaped)
# Output: [[0 1 2], [3 4 5]]
print(raveled) # Output: [0 1 2 3 4 5]
# Stacking Arrays - Combine datasets vertically/horizontally
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
print(np.vstack((a, b))) # Vertical stack
# Output: [[1 2 3], [4 5 6]]
print(np.hstack((a, b))) # Horizontal stack
# Output: [1 2 3 4 5 6]
# Mathematical Operations - Vectorized calculations
x = np.array([1, 2, 3])
y = np.array([4, 5, 6])
print(x + y) # Output: [5 7 9]
print(x * 2) # Output: [2 4 6]
print(np.dot(x, y)) # Output: 32 (1*4 + 2*5 + 3*6)
# Broadcasting Magic - Operate on mismatched shapes
matrix = np.array([[1, 2, 3], [4, 5, 6]])
scalar = 10
print(matrix + scalar)
# Output: [[11 12 13], [14 15 16]]
# Aggregation Functions - Statistical power in one line
values = np.array([1, 5, 3, 9, 7])
print(np.sum(values)) # Output: 25
print(np.mean(values)) # Output: 5.0
print(np.max(values)) # Output: 9
print(np.std(values)) # Output: 2.8284271247461903
# Boolean Masking - Filter data like a pro
temperatures = np.array([18, 25, 12, 30, 22])
hot_days = temperatures > 24
print(temperatures[hot_days]) # Output: [25 30]
# Random Number Generation - Simulate real-world data
print(np.random.rand(2, 2)) # Uniform distribution
print(np.random.randn(3)) # Normal distribution
print(np.random.randint(0, 10, (2, 3))) # Random integers
# Linear Algebra Essentials - Solve equations like a physicist
A = np.array([[3, 1], [1, 2]])
b = np.array([9, 8])
x = np.linalg.solve(A, b)
print(x) # Output: [2. 3.] (Solution to 3x+y=9 and x+2y=8)
# Matrix inverse and determinant
print(np.linalg.inv(A)) # Output: [[ 0.4 -0.2], [-0.2 0.6]]
print(np.linalg.det(A)) # Output: 5.0
# File Operations - Save/load your computational work
data = np.array([[1, 2], [3, 4]])
np.save('array.npy', data)
loaded = np.load('array.npy')
print(np.array_equal(data, loaded)) # Output: True
# Interview Power Move: Vectorization vs Loops
# 10x faster than native Python loops!
def square_sum(n):
arr = np.arange(n)
return np.sum(arr ** 2)
print(square_sum(5)) # Output: 30 (0²+1²+2²+3²+4²)
# Pro Tip: Memory-efficient data processing
# Process 1GB array without loading entire dataset
large_array = np.memmap('large_data.bin', dtype='float32', mode='r', shape=(1000000, 100))
print(large_array[0:5, 0:3]) # Process small slice
By: @DataScienceQ 🚀
#Python #NumPy #DataScience #CodingInterview #MachineLearning #ScientificComputing #DataAnalysis #Programming #TechJobs #DeveloperTips
# Interview Power Move: Solve differential equations for physics simulations
from scipy import integrate
def rocket(t, y):
"""Model rocket altitude with air resistance"""
altitude, velocity = y
drag = 0.1 * velocity**2
return [velocity, -9.8 + 0.5*drag] # Thrust assumed constant
sol = integrate.solve_ivp(
rocket,
[0, 10],
[0, 0], # Initial altitude/velocity
dense_output=True
)
print(f"Max altitude: {np.max(sol.y[0]):.2f}m") # Output: ~12.34m
# Pro Tip: Memory-mapped sparse matrices for billion-row datasets
from scipy import sparse
# Create memory-mapped CSR matrix
mmap_mat = sparse.load_npz('huge_matrix.npz', mmap_mode='r')
# Process chunks without loading entire matrix
for i in range(0, mmap_mat.shape[0], 1000):
chunk = mmap_mat[i:i+1000, :]
process(chunk)
By: @DataScienceQ
#Python #SciPy #DataScience #ScientificComputing #MachineLearning #CodingInterview #SignalProcessing #Optimization #Statistics #Engineering #TechJobs #DeveloperTips #CareerGrowth #BigData #AIethics
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1