Python Data Science Jobs & Interviews
20.7K subscribers
195 photos
4 videos
26 files
341 links
Your go-to hub for Python and Data Scienceβ€”featuring questions, answers, quizzes, and interview tips to sharpen your skills and boost your career in the data-driven world.

Admin: @Hussein_Sheikho
Download Telegram
🧠 Quiz: Which of the following is the most Pythonic and efficient way to iterate through a list my_list and access both each item and its corresponding index?

A) i = 0; while i < len(my_list): item = my_list[i]; i += 1
B) for index, item in enumerate(my_list):
C) for index in range(len(my_list)): item = my_list[index]
D) for item in my_list: index = my_list.index(item)

βœ… Correct answer: B

Explanation: The enumerate() function is specifically designed to provide both the index and the item while iterating over a sequence, making the code cleaner, more readable, and generally more efficient than manual indexing or while loops. Option D is inefficient as list.index(item) scans the list for each item, especially if duplicates exist.

#PythonTips #Pythonic #Programming

━━━━━━━━━━━━━━━
By: @DataScienceQ ✨
πŸ’‘ Python Lists: Adding and Extending

Use .append() to add a single item to the end of a list. Use .extend() to add all items from an iterable (like another list) to the end.

# Create a list of numbers
my_list = [10, 20, 30]

# Add a single element
my_list.append(40)
# my_list is now [10, 20, 30, 40]
print(f"After append: {my_list}")

# Add elements from another list
another_list = [50, 60]
my_list.extend(another_list)
# my_list is now [10, 20, 30, 40, 50, 60]
print(f"After extend: {my_list}")


Code explanation: The code first initializes a list. .append(40) adds the integer 40 to the end. Then, .extend() takes each item from another_list and adds them individually to the end of my_list.

#Python #PythonLists #DataStructures #CodingTips #PythonCheatsheet

━━━━━━━━━━━━━━━
By: @DataScienceQ ✨
πŸ’‘ Python Conditionals: if, elif, and else

The if-elif-else structure allows your program to execute different code blocks based on a series of conditions. It evaluates them sequentially:

β€’ if: The first condition to check. If it's True, its code block runs, and the entire structure is exited.
β€’ elif: (short for "else if") If the preceding if (or elif) was False, this condition is checked. You can have multiple elif blocks.
β€’ else: This is an optional final block. Its code runs only if all preceding if and elif conditions were False.

This provides a clear and efficient way to handle multiple mutually exclusive scenarios.

# A program to categorize a number
number = 75

if number < 0:
category = "Negative"
elif number == 0:
category = "Zero"
elif 0 < number <= 50:
category = "Small Positive (1-50)"
elif 50 < number <= 100:
category = "Medium Positive (51-100)"
else:
category = "Large Positive (>100)"

print(f"The number {number} is in the category: {category}")
# Output: The number 75 is in the category: Medium Positive (51-100)


Code explanation: The script evaluates the variable number. It first checks if it's negative, then if it's zero. After that, it checks two positive ranges using elif. Since 75 is greater than 50 and less than or equal to 100, the condition 50 < number <= 100 is met, the category is set to "Medium Positive", and the final else block is skipped.

#Python #ControlFlow #IfStatement #PythonTips #ProgrammingLogic

━━━━━━━━━━━━━━━
By: @DataScienceQ ✨
🧠 Quiz: What is one of the most critical first steps when starting a new data analysis project?

A) Select the most complex predictive model.
B) Immediately remove all outliers from the dataset.
C) Perform Exploratory Data Analysis (EDA) to understand the data's main characteristics.
D) Normalize all numerical features.

βœ… Correct answer: C

Explanation: EDA is crucial because it helps you summarize the data's main features, identify patterns, spot anomalies, and check assumptions before you proceed with more formal modeling. Steps like modeling or removing outliers should be informed by the initial understanding gained from EDA.

#DataAnalysis #DataScience #Statistics

━━━━━━━━━━━━━━━
By: @DataScienceQ ✨
❀4
🧠 Quiz: Which keyword is used to implement inheritance between classes in Java?

A) implements
B) extends
C) inherits
D) uses

βœ… Correct answer: B

Explanation: In Java, the extends keyword is used to indicate that a class is inheriting from another class, forming an "is-a" relationship. The implements keyword is used for interfaces.

#Java #OOP #Inheritance

━━━━━━━━━━━━━━━
By: @DataScienceQ ✨
🧠 Quiz: Which submodule of Matplotlib is commonly imported with the alias plt to create plots and visualizations?

A) matplotlib.animation
B) matplotlib.pyplot
C) matplotlib.widgets
D) matplotlib.cm

βœ… Correct answer: B

Explanation: matplotlib.pyplot is the most widely used module in Matplotlib, providing a convenient, MATLAB-like interface for creating a variety of plots and charts. It's standard practice to import it as import matplotlib.pyplot as plt.

#Matplotlib #Python #DataVisualization

━━━━━━━━━━━━━━━
By: @DataScienceQ ✨
❀2πŸ”₯1
This channels is for Programmers, Coders, Software Engineers.

0️⃣ Python
1️⃣ Data Science
2️⃣ Machine Learning
3️⃣ Data Visualization
4️⃣ Artificial Intelligence
5️⃣ Data Analysis
6️⃣ Statistics
7️⃣ Deep Learning
8️⃣ programming Languages

βœ… https://t.iss.one/addlist/8_rRW2scgfRhOTc0

βœ… https://t.iss.one/Codeprogrammer
Please open Telegram to view this post
VIEW IN TELEGRAM
❀1
🧠 Quiz: What is the most "Pythonic" way to create a new list containing the squares of numbers from an existing list called nums?

A) Using a for loop and the .append() method.
B) new_list = [num**2 for num in nums]
C) Using a while loop with an index counter.
D) new_list = (num**2 for num in nums)

βœ… Correct answer: B

Explanation: This is a list comprehension. It's a concise, readable, and often faster way to create a new list from an iterable compared to a traditional for loop. Option D creates a generator expression, not a list.

#Python #ProgrammingTips #PythonQuiz

━━━━━━━━━━━━━━━
By: @DataScienceQ ✨
❔ Interview question

What is the order of execution of decorators if there are several on one function?

Answer: Decorators are executed from bottom to top β€” the bottom one is called first, then the upper one, wrapping the function in several layers.

tags: #interview

➑ @DataScienceQ
Please open Telegram to view this post
VIEW IN TELEGRAM
❔ Interview question

What is the difference between using tensor.detach() and wrapping code in with torch.no_grad()?

Answer: with torch.no_grad() is a context manager that globally disables gradient calculation for all operations within its block. It's used during inference to reduce memory usage and speed up computation. tensor.detach() is a tensor-specific method that creates a new tensor sharing the same data but detached from the current computation graph. This stops gradients from flowing back to the original graph through this tensor, effectively creating a fork.

tags: #interview #pytorch #machinelearning

➑ @DataScienceQ
❔ Interview question

When saving a PyTorch model, what is the difference between saving the entire model versus saving just the model's state_dict? Which approach is generally recommended and why?

Answer: Saving the entire model (torch.save(model, PATH)) pickles the entire Python object, including the model architecture and its parameters. Saving just the state_dict (torch.save(model.state_dict(), PATH)) saves only a dictionary of the model's parameters (weights and biases).

The recommended approach is to save the
state_dict because it is more flexible and robust. It decouples the saved weights from the specific code that defined the model, making your code easier to refactor and share without breaking the loading process.

tags: #interview #pytorch #machinelearning

➑ @DataScienceQ

━━━━━━━━━━━━━━━
By: @DataScienceQ ✨
❔ Interview question

What is the purpose of a pooling layer in a Convolutional Neural Network (CNN)?

Answer: A pooling layer (like Max Pooling or Average Pooling) is used to progressively reduce the spatial size (width and height) of the feature maps. This serves two main purposes: 1) It reduces the number of parameters and computational complexity, which helps to control overfitting. 2) It introduces a degree of translation invariance, meaning the network becomes more robust to small shifts and distortions in the position of features in the input image.

tags: #interview #cnn #deeplearning

━━━━━━━━━━━━━━━
By: @DataScienceQ ✨
❔ Interview question

What is the difference between the == (loose comparison) and === (strict comparison) operators in PHP?

Answer: The == operator is for loose comparison, checking for value equality after type juggling. For example, 1 == "1" is true. The === operator is for strict comparison, checking for both value AND type equality, without any type conversion. So, 1 === "1" is false. It's generally safer to use === to avoid unexpected bugs.

tags: #interview #php

━━━━━━━━━━━━━━━
By: @DataScienceQ ✨
❔ Interview question

What is the difference between isset() and empty() in PHP?

Answer: isset() returns true only if a variable is declared and is not NULL. In contrast, empty() returns true if a variable is considered "falsy", which includes NULL, false, 0, "0", an empty string "", or an empty array. A key difference is that a variable like $var = 0; is set (so isset() is true), but also considered empty (so empty() is true).

tags: #interview #php

━━━━━━━━━━━━━━━
By: @DataScienceQ ✨
❀1
❔ Interview question

Why is it better to use os.path.join() to construct paths instead of simple string concatenation?

Answer: Because os.path.join() handles cross-platform compatibility automatically. Operating systems use different path separators (e.g., / for Linux/macOS and \ for Windows). Hardcoding a separator like 'folder' + '/' + 'file' will break on a different OS. os.path.join('folder', 'file') correctly produces folder/file or folder\file depending on the system, making the code robust and portable.

tags: #interview #python #os

━━━━━━━━━━━━━━━
By: @DataScienceQ ✨
❀1
Clean Code Tip:

For functions with expensive, repeated computations, manual memoization (caching) adds boilerplate and clutters your logic. Use the @lru_cache decorator from functools to get a powerful, ready-made cache with a single line of code. It's a pro-level move for clean, high-performance Python. πŸš€

Example:

import time
from functools import lru_cache

# The verbose way with manual caching
def fibonacci_manual(n, cache={}):
if n in cache:
return cache[n]
if n < 2:
return n

# Simulate an expensive computation
time.sleep(0.5)

result = fibonacci_manual(n - 1) + fibonacci_manual(n - 2)
cache[n] = result
return result

print("--- Manual Caching Way ---")
start_time = time.time()
print(f"Result: {fibonacci_manual(10)}")
print(f"First call took: {time.time() - start_time:.2f}s")

start_time = time.time()
print(f"Result: {fibonacci_manual(10)}")
print(f"Second call (cached) took: {time.time() - start_time:.2f}s")


# The clean, Pythonic way using @lru_cache
@lru_cache(maxsize=None)
def fibonacci_lru(n):
if n < 2:
return n

# Simulate an expensive computation
time.sleep(0.5)

return fibonacci_lru(n - 1) + fibonacci_lru(n - 2)

print("\n--- Clean @lru_cache Way ---")
start_time = time.time()
print(f"Result: {fibonacci_lru(10)}")
print(f"First call took: {time.time() - start_time:.2f}s")

start_time = time.time()
print(f"Result: {fibonacci_lru(10)}")
print(f"Second call (cached) took: {time.time() - start_time:.2f}s")


━━━━━━━━━━━━━━━
By: @DataScienceQ ✨
❀2
❔ Interview Question

How to get the current module's name?

Answer: The module name is available through the built-in variable name. If the module is imported, name contains its full name in the namespace. If the module is run as the main script, name automatically takes the value "main".

tags:
#interview

➑ @DataScienceQ
Please open Telegram to view this post
VIEW IN TELEGRAM
❀1
Top 50 C++ Keywords & Functions

#CPP #Basics #IO

#1. #include <iostream>
A preprocessor directive that includes the input/output stream library.

#include <iostream>

int main() {
std::cout << "This requires iostream!";
return 0;
}

This requires iostream!


#2. int main()
The main function where program execution begins.

#include <iostream>

int main() {
std::cout << "Program starts here.";
return 0;
}

Program starts here.


#3. std::cout
Used to output data (print to the console).

#include <iostream>

int main() {
std::cout << "Hello, C++!";
return 0;
}

Hello, C++!


#4. std::cin
Used to get input from the user.

#include <iostream>
#include <string>

int main() {
int age;
std::cout << "Enter your age: ";
std::cin >> age;
std::cout << "You are " << age << " years old.";
return 0;
}

Enter your age: 25
You are 25 years old.


#5. using namespace std;
Tells the compiler to use the std (standard) namespace. Avoids prefixing std:: to every standard function.

#include <iostream>
using namespace std;

int main() {
cout << "No std:: prefix needed.";
return 0;
}

No std:: prefix needed.

---
#CPP #DataTypes #Variables

#6. int
Declares an integer variable.

#include <iostream>

int main() {
int number = 100;
std::cout << "The number is: " << number;
return 0;
}

The number is: 100


#7. double
Declares a floating-point number variable (can hold decimals).

#include <iostream>

int main() {
double price = 19.99;
std::cout << "The price is: " << price;
return 0;
}

The price is: 19.99


#8. char
Declares a character variable.

#include <iostream>

int main() {
char grade = 'A';
std::cout << "Your grade is: " << grade;
return 0;
}

Your grade is: A


#9. bool
Declares a boolean variable, which can only have the value true or false.

#include <iostream>

int main() {
bool isRaining = false;
std::cout << "Is it raining? " << isRaining; // Outputs 0 for false
return 0;
}

Is it raining? 0


#10. std::string
Declares a variable that can hold a sequence of characters. Requires #include <string>.

#include <iostream>
#include <string>

int main() {
std::string greeting = "Hello, World!";
std::cout << greeting;
return 0;
}

Hello, World!

---
#CPP #Keywords #Operators

#11. const
Declares a variable as a constant, meaning its value cannot be changed.

#include <iostream>

int main() {
const double PI = 3.14159;
std::cout << "The value of PI is: " << PI;
// PI = 4; // This would cause a compile error
return 0;
}

The value of PI is: 3.14159


#12. sizeof()
An operator that returns the size (in bytes) of a data type or variable.

#include <iostream>

int main() {
int myInt;
std::cout << "Size of int is: " << sizeof(myInt) << " bytes.";
return 0;
}

Size of int is: 4 bytes.
#13. auto
A keyword that lets the compiler automatically deduce the data type of a variable at compile-time.

#include <iostream>

int main() {
auto number = 10; // Compiler deduces int
auto pi = 3.14; // Compiler deduces double
std::cout << "Type of 'number' is deduced.";
return 0;
}

Type of 'number' is deduced.


#14. & (Address-of Operator)
Returns the memory address of a variable.

#include <iostream>

int main() {
int var = 20;
std::cout << "Memory address of var: " << &var;
return 0;
}

Memory address of var: 0x61ff08 
(Note: Address will vary)


#15. * (Dereference Operator)
Accesses the value stored at a memory address held by a pointer.

#include <iostream>

int main() {
int var = 50;
int* ptr = &var; // ptr holds the address of var
std::cout << "Value at address " << ptr << " is " << *ptr;
return 0;
}

Value at address 0x61ff04 is 50
(Note: Address will vary)

---
#CPP #ControlFlow #Conditional

#16. if
Executes a block of code if a specified condition is true.

#include <iostream>

int main() {
int age = 18;
if (age >= 18) {
std::cout << "You are an adult.";
}
return 0;
}

You are an adult.


#17. else
Executes a block of code if the condition in the if statement is false.

#include <iostream>

int main() {
int age = 16;
if (age >= 18) {
std::cout << "You are an adult.";
} else {
std::cout << "You are not an adult.";
}
return 0;
}

You are not an adult.


#18. else if
Specifies a new condition to test, if the first if condition is false.

#include <iostream>

int main() {
int score = 85;
if (score >= 90) {
std::cout << "Grade: A";
} else if (score >= 80) {
std::cout << "Grade: B";
} else {
std::cout << "Grade: C";
}
return 0;
}

Grade: B


#19. switch / case
Selects one of many code blocks to be executed.

#include <iostream>

int main() {
int day = 3;
switch (day) {
case 1:
std::cout << "Monday";
break;
case 2:
std::cout << "Tuesday";
break;
case 3:
std::cout << "Wednesday";
break;
}
return 0;
}

Wednesday


#20. break
Used to exit a switch statement or a loop.

#include <iostream>

int main() {
for (int i = 0; i < 10; ++i) {
if (i == 5) {
break; // Exit the loop when i is 5
}
std::cout << i << " ";
}
return 0;
}

0 1 2 3 4

---
#CPP #Loops

#21. for
Executes a block of code a specified number of times.

#include <iostream>

int main() {
for (int i = 0; i < 5; ++i) {
std::cout << i << " ";
}
return 0;
}

0 1 2 3 4


#22. while
Loops through a block of code as long as a specified condition is true.

#include <iostream>

int main() {
int i = 0;
while (i < 5) {
std::cout << i << " ";
i++;
}
return 0;
}

0 1 2 3 4
❀1
#23. do-while
Similar to a while loop, but the code block is executed at least once before the condition is tested.

#include <iostream>

int main() {
int i = 5;
do {
std::cout << "This will run once.";
i++;
} while (i < 5);
return 0;
}

This will run once.


#24. Range-based for loop
Iterates over all elements in a range, such as an array or vector, without using an index.

#include <iostream>
#include <vector>

int main() {
int numbers[] = {10, 20, 30};
for (int num : numbers) {
std::cout << num << " ";
}
return 0;
}

10 20 30


#25. continue
Skips the current iteration of a loop and continues with the next iteration.

#include <iostream>

int main() {
for (int i = 0; i < 5; ++i) {
if (i == 2) {
continue; // Skip printing 2
}
std::cout << i << " ";
}
return 0;
}

0 1 3 4

---
#CPP #Functions

#26. Function Declaration (Prototype)
Declares a function's name, return type, and parameters, allowing it to be used before it's defined.

#include <iostream>

void sayHello(); // Function declaration

int main() {
sayHello(); // Call the function
return 0;
}

void sayHello() { // Function definition
std::cout << "Hello from function!";
}

Hello from function!


#27. void
A keyword specifying that a function does not return any value.

#include <iostream>

void printMessage(std::string message) {
std::cout << message;
}

int main() {
printMessage("This function returns nothing.");
return 0;
}

This function returns nothing.


#28. return
Terminates a function and can return a value to the caller.

#include <iostream>

int add(int a, int b) {
return a + b; // Return the sum
}

int main() {
int result = add(5, 3);
std::cout << "Result: " << result;
return 0;
}

Result: 8


#29. #include <cmath>
Includes the C++ math library for complex mathematical operations.

#include <iostream>
#include <cmath> // Include for sqrt()

int main() {
double number = 25.0;
std::cout << "Square root is: " << sqrt(number);
return 0;
}

Square root is: 5


#30. pow()
A function from <cmath> that returns the base raised to the power of the exponent.

#include <iostream>
#include <cmath>

int main() {
double result = pow(2, 3); // 2 to the power of 3
std::cout << "2^3 is: " << result;
return 0;
}

2^3 is: 8

---
#CPP #STL #Vector

#31. #include <vector>
Includes the library for std::vector, a dynamic array.

#include <iostream>
#include <vector>

int main() {
std::vector<int> myVector;
myVector.push_back(1);
std::cout << "Vector is ready.";
return 0;
}

Vector is ready.


#32. std::vector
A sequence container that encapsulates dynamic size arrays.

#include <iostream>
#include <vector>

int main() {
std::vector<int> numbers = {10, 20, 30};
std::cout << "First element: " << numbers[0];
return 0;
}

First element: 10


#33. .push_back()
Member function of std::vector that adds an element to the end.
❀1