🎯 empfohlene Sammlungen
Balanced sample collections from various categories for you to explore
Web Python Datenstrukturen Beispiele
Web Python Datenstrukturen Beispiele einschließlich Array-Operationen, Hashtabellen und verketteten Listen
💻 Array-Operationen python
🟢 simple
⭐⭐
Array-/Listenoperationen ausführen einschließlich CRUD, Sortierung, Suche und Transformationen
⏱️ 30 min
🏷️ python, web, data structures, arrays
Prerequisites:
Basic Python, Lists
# Web Python Array Operations Examples
# Using Python lists for array operations with comprehensive CRUD functionality
# 1. Basic Array/List Operations
from typing import List, Any, Optional, Callable
import bisect
def create_array(elements: List[Any] = None) -> List[Any]:
"""
Create a new array (list)
Args:
elements: Initial elements
Returns:
New list
"""
return elements.copy() if elements else []
def add_element(array: List[Any], element: Any, position: Optional[int] = None) -> List[Any]:
"""
Add element to array
Args:
array: Target array
element: Element to add
position: Position to insert (None = append)
Returns:
Modified array
"""
if position is None:
array.append(element)
else:
array.insert(position, element)
return array
def remove_element(array: List[Any], element: Any) -> bool:
"""
Remove element from array
Args:
array: Target array
element: Element to remove
Returns:
True if removed
"""
try:
array.remove(element)
return True
except ValueError:
return False
def remove_at(array: List[Any], index: int) -> Any:
"""
Remove element at index
Args:
array: Target array
index: Index to remove
Returns:
Removed element
"""
if 0 <= index < len(array):
return array.pop(index)
return None
def get_element(array: List[Any], index: int) -> Any:
"""
Get element at index
Args:
array: Target array
index: Index to get
Returns:
Element at index
"""
return array[index] if 0 <= index < len(array) else None
def update_element(array: List[Any], index: int, new_value: Any) -> bool:
"""
Update element at index
Args:
array: Target array
index: Index to update
new_value: New value
Returns:
True if updated
"""
if 0 <= index < len(array):
array[index] = new_value
return True
return False
def find_index(array: List[Any], element: Any) -> int:
"""
Find index of element
Args:
array: Target array
element: Element to find
Returns:
Index or -1 if not found
"""
try:
return array.index(element)
except ValueError:
return -1
def contains(array: List[Any], element: Any) -> bool:
"""
Check if array contains element
Args:
array: Target array
element: Element to check
Returns:
True if contains
"""
return element in array
def get_size(array: List[Any]) -> int:
"""
Get array size
Args:
array: Target array
Returns:
Array length
"""
return len(array)
def is_empty(array: List[Any]) -> bool:
"""
Check if array is empty
Args:
array: Target array
Returns:
True if empty
"""
return len(array) == 0
def clear_array(array: List[Any]) -> List[Any]:
"""
Clear all elements
Args:
array: Target array
Returns:
Empty array
"""
array.clear()
return array
# 2. Sorting Operations
def bubble_sort(array: List[Any], key: Optional[Callable] = None, reverse: bool = False) -> List[Any]:
"""
Bubble sort algorithm
Args:
array: Array to sort
key: Sort key function
reverse: Sort descending
Returns:
Sorted array
"""
arr = array.copy()
n = len(arr)
for i in range(n):
for j in range(0, n - i - 1):
if key:
a, b = key(arr[j]), key(arr[j + 1])
else:
a, b = arr[j], arr[j + 1]
if reverse:
should_swap = a < b
else:
should_swap = a > b
if should_swap:
arr[j], arr[j + 1] = arr[j + 1], arr[j]
return arr
def quick_sort(array: List[Any], key: Optional[Callable] = None, reverse: bool = False) -> List[Any]:
"""
Quick sort algorithm
Args:
array: Array to sort
key: Sort key function
reverse: Sort descending
Returns:
Sorted array
"""
if len(array) <= 1:
return array
pivot = array[len(array) // 2]
if key:
pivot_value = key(pivot)
else:
pivot_value = pivot
left = [x for x in array if (key(x) if key else x) < pivot_value]
middle = [x for x in array if (key(x) if key else x) == pivot_value]
right = [x for x in array if (key(x) if key else x) > pivot_value]
if reverse:
return quick_sort(right, key, reverse) + middle + quick_sort(left, key, reverse)
else:
return quick_sort(left, key, reverse) + middle + quick_sort(right, key, reverse)
def merge_sort(array: List[Any], key: Optional[Callable] = None, reverse: bool = False) -> List[Any]:
"""
Merge sort algorithm
Args:
array: Array to sort
key: Sort key function
reverse: Sort descending
Returns:
Sorted array
"""
if len(array) <= 1:
return array
mid = len(array) // 2
left = merge_sort(array[:mid], key, reverse)
right = merge_sort(array[mid:], key, reverse)
return merge(left, right, key, reverse)
def merge(left: List[Any], right: List[Any], key: Optional[Callable], reverse: bool) -> List[Any]:
"""Merge two sorted arrays"""
result = []
i = j = 0
while i < len(left) and j < len(right):
left_val = key(left[i]) if key else left[i]
right_val = key(right[j]) if key else right[j]
if reverse:
condition = left_val >= right_val
else:
condition = left_val <= right_val
if condition:
result.append(left[i])
i += 1
else:
result.append(right[j])
j += 1
result.extend(left[i:])
result.extend(right[j:])
return result
def sort_array(array: List[Any], key: Optional[Callable] = None, reverse: bool = False, algorithm: str = 'builtin') -> List[Any]:
"""
Sort array using specified algorithm
Args:
array: Array to sort
key: Sort key function
reverse: Sort descending
algorithm: 'builtin', 'bubble', 'quick', 'merge'
Returns:
Sorted array
"""
if algorithm == 'bubble':
return bubble_sort(array, key, reverse)
elif algorithm == 'quick':
return quick_sort(array, key, reverse)
elif algorithm == 'merge':
return merge_sort(array, key, reverse)
else:
return sorted(array, key=key, reverse=reverse)
# 3. Searching Operations
def linear_search(array: List[Any], target: Any, key: Optional[Callable] = None) -> int:
"""
Linear search
Args:
array: Array to search
target: Target value
key: Key function for comparison
Returns:
Index or -1 if not found
"""
for i, element in enumerate(array):
value = key(element) if key else element
if value == target:
return i
return -1
def binary_search(array: List[Any], target: Any, key: Optional[Callable] = None) -> int:
"""
Binary search (requires sorted array)
Args:
array: Sorted array to search
target: Target value
key: Key function for comparison
Returns:
Index or -1 if not found
"""
left, right = 0, len(array) - 1
while left <= right:
mid = (left + right) // 2
mid_value = key(array[mid]) if key else array[mid]
if mid_value == target:
return mid
elif mid_value < target:
left = mid + 1
else:
right = mid - 1
return -1
def find_all(array: List[Any], target: Any, key: Optional[Callable] = None) -> List[int]:
"""
Find all occurrences
Args:
array: Array to search
target: Target value
key: Key function for comparison
Returns:
List of indices
"""
indices = []
for i, element in enumerate(array):
value = key(element) if key else element
if value == target:
indices.append(i)
return indices
def find_min(array: List[Any], key: Optional[Callable] = None) -> Any:
"""
Find minimum element
Args:
array: Array to search
key: Key function for comparison
Returns:
Minimum element
"""
if not array:
return None
return min(array, key=key) if key else min(array)
def find_max(array: List[Any], key: Optional[Callable] = None) -> Any:
"""
Find maximum element
Args:
array: Array to search
key: Key function for comparison
Returns:
Maximum element
"""
if not array:
return None
return max(array, key=key) if key else max(array)
# 4. Transformation Operations
def map_array(array: List[Any], func: Callable[[Any], Any]) -> List[Any]:
"""
Apply function to all elements
Args:
array: Source array
func: Transform function
Returns:
New array
"""
return [func(x) for x in array]
def filter_array(array: List[Any], predicate: Callable[[Any], bool]) -> List[Any]:
"""
Filter elements by predicate
Args:
array: Source array
predicate: Filter function
Returns:
Filtered array
"""
return [x for x in array if predicate(x)]
def reduce_array(array: List[Any], func: Callable[[Any, Any], Any], initial: Any = None) -> Any:
"""
Reduce array to single value
Args:
array: Source array
func: Reduce function
initial: Initial value
Returns:
Reduced value
"""
if initial is not None:
result = initial
for x in array:
result = func(result, x)
else:
result = array[0]
for x in array[1:]:
result = func(result, x)
return result
def flatten_array(array: List[Any]) -> List[Any]:
"""
Flatten nested array
Args:
array: Nested array
Returns:
Flattened array
"""
result = []
for element in array:
if isinstance(element, list):
result.extend(flatten_array(element))
else:
result.append(element)
return result
def chunk_array(array: List[Any], size: int) -> List[List[Any]]:
"""
Split array into chunks
Args:
array: Source array
size: Chunk size
Returns:
List of chunks
"""
return [array[i:i + size] for i in range(0, len(array), size)]
# 5. Advanced Operations
def rotate_array(array: List[Any], positions: int) -> List[Any]:
"""
Rotate array
Args:
array: Source array
positions: Positions to rotate (positive = right)
Returns:
Rotated array
"""
if not array:
return array
positions = positions % len(array)
return array[-positions:] + array[:-positions]
def reverse_array(array: List[Any]) -> List[Any]:
"""
Reverse array
Args:
array: Source array
Returns:
Reversed array
"""
return array[::-1]
def shuffle_array(array: List[Any]) -> List[Any]:
"""
Shuffle array randomly
Args:
array: Source array
Returns:
Shuffled array
"""
import random
result = array.copy()
random.shuffle(result)
return result
def unique_array(array: List[Any], key: Optional[Callable] = None) -> List[Any]:
"""
Get unique elements
Args:
array: Source array
key: Key function for uniqueness
Returns:
Unique elements
"""
if key:
seen = set()
result = []
for item in array:
k = key(item)
if k not in seen:
seen.add(k)
result.append(item)
return result
else:
return list(dict.fromkeys(array))
def intersect_arrays(arr1: List[Any], arr2: List[Any]) -> List[Any]:
"""
Find intersection of two arrays
Args:
arr1: First array
arr2: Second array
Returns:
Intersection
"""
return list(set(arr1) & set(arr2))
def union_arrays(arr1: List[Any], arr2: List[Any]) -> List[Any]:
"""
Find union of two arrays
Args:
arr1: First array
arr2: Second array
Returns:
Union
"""
return list(set(arr1) | set(arr2))
def difference_arrays(arr1: List[Any], arr2: List[Any]) -> List[Any]:
"""
Find difference of two arrays
Args:
arr1: First array
arr2: Second array
Returns:
Difference
"""
return list(set(arr1) - set(arr2))
# 6. Statistical Operations
def sum_array(array: List[float]) -> float:
"""Calculate sum of array"""
return sum(array)
def mean_array(array: List[float]) -> float:
"""Calculate mean of array"""
return sum(array) / len(array) if array else 0
def median_array(array: List[float]) -> float:
"""Calculate median of array"""
if not array:
return 0
sorted_arr = sorted(array)
n = len(sorted_arr)
mid = n // 2
if n % 2 == 0:
return (sorted_arr[mid - 1] + sorted_arr[mid]) / 2
else:
return sorted_arr[mid]
def mode_array(array: List[Any]) -> Any:
"""Calculate mode of array"""
from collections import Counter
if not array:
return None
counter = Counter(array)
return counter.most_common(1)[0][0]
def std_deviation(array: List[float]) -> float:
"""Calculate standard deviation"""
import math
if len(array) < 2:
return 0
mean = mean_array(array)
variance = sum((x - mean) ** 2 for x in array) / len(array)
return math.sqrt(variance)
# Usage Examples
def demonstrate_array_operations():
print("=== Web Python Array Operations Examples ===\n")
# 1. Basic operations
print("--- 1. Basic Operations ---")
arr = create_array([3, 1, 4, 1, 5])
print(f"Created: {arr}")
add_element(arr, 9)
print(f"After append: {arr}")
add_element(arr, 2, position=0)
print(f"After insert at 0: {arr}")
print(f"Size: {get_size(arr)}")
# 2. Sorting
print("\n--- 2. Sorting ---")
unsorted = [64, 34, 25, 12, 22, 11, 90]
print(f"Original: {unsorted}")
print(f"Bubble sort: {bubble_sort(unsorted.copy())}")
print(f"Quick sort: {quick_sort(unsorted.copy())}")
print(f"Builtin sort: {sort_array(unsorted.copy())}")
# 3. Searching
print("\n--- 3. Searching ---")
data = [1, 3, 5, 7, 9, 11, 13]
print(f"Array: {data}")
print(f"Linear search for 7: {linear_search(data, 7)}")
print(f"Binary search for 7: {binary_search(data, 7)}")
print(f"Find all 1s: {find_all([1, 2, 1, 3, 1], 1)}")
# 4. Transformations
print("\n--- 4. Transformations ---")
numbers = [1, 2, 3, 4, 5]
print(f"Original: {numbers}")
print(f"Map (x^2): {map_array(numbers, lambda x: x ** 2)}")
print(f"Filter (even): {filter_array(numbers, lambda x: x % 2 == 0)}")
print(f"Reduce (sum): {reduce_array(numbers, lambda a, b: a + b, 0)}")
print(f"Flatten: {flatten_array([1, [2, 3], [4, [5]]])}")
# 5. Advanced operations
print("\n--- 5. Advanced Operations ---")
data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(f"Original: {data}")
print(f"Rotate 3: {rotate_array(data, 3)}")
print(f"Reverse: {reverse_array(data)}")
print(f"Unique: {unique_array([1, 2, 2, 3, 3, 3, 4])}")
print(f"Chunk size 3: {chunk_array(data, 3)}")
# 6. Statistical
print("\n--- 6. Statistical Operations ---")
numbers = [2, 4, 4, 4, 5, 5, 7, 9]
print(f"Data: {numbers}")
print(f"Sum: {sum_array(numbers)}")
print(f"Mean: {mean_array(numbers):.2f}")
print(f"Median: {median_array(numbers)}")
print(f"Mode: {mode_array(numbers)}")
print(f"Std deviation: {std_deviation(numbers):.2f}")
print("\n=== All Array Operations Examples Completed ===")
# Export functions
export { create_array, add_element, remove_element, remove_at, get_element, update_element }
export { find_index, contains, get_size, is_empty, clear_array }
export { bubble_sort, quick_sort, merge_sort, sort_array }
export { linear_search, binary_search, find_all, find_min, find_max }
export { map_array, filter_array, reduce_array, flatten_array, chunk_array }
export { rotate_array, reverse_array, shuffle_array, unique_array }
export { intersect_arrays, union_arrays, difference_arrays }
export { sum_array, mean_array, median_array, mode_array, std_deviation }
export { demonstrate_array_operations }
💻 Hashtabelle python
🟡 intermediate
⭐⭐⭐
Hashtabellen (Wörterbücher) implementieren und verwenden für Schlüssel-Wert-Speicherung und Suchvorgänge
⏱️ 25 min
🏷️ python, web, data structures, hash table
Prerequisites:
Intermediate Python, Dictionaries
# Web Python Hash Table Examples
# Using Python dictionaries for key-value storage and efficient lookups
# 1. Basic Dictionary Operations
from typing import Any, Dict, List, Optional, Callable
def create_hash_table(elements: Dict[Any, Any] = None) -> Dict[Any, Any]:
"""
Create a new hash table (dictionary)
Args:
elements: Initial key-value pairs
Returns:
New dictionary
"""
return elements.copy() if elements else {}
def put(ht: Dict[Any, Any], key: Any, value: Any) -> None:
"""
Add or update key-value pair
Args:
ht: Hash table
key: Key
value: Value
"""
ht[key] = value
def get(ht: Dict[Any, Any], key: Any, default: Any = None) -> Any:
"""
Get value by key
Args:
ht: Hash table
key: Key to lookup
default: Default value if key not found
Returns:
Value or default
"""
return ht.get(key, default)
def remove(ht: Dict[Any, Any], key: Any) -> bool:
"""
Remove key-value pair
Args:
ht: Hash table
key: Key to remove
Returns:
True if removed
"""
if key in ht:
del ht[key]
return True
return False
def contains_key(ht: Dict[Any, Any], key: Any) -> bool:
"""
Check if key exists
Args:
ht: Hash table
key: Key to check
Returns:
True if key exists
"""
return key in ht
def contains_value(ht: Dict[Any, Any], value: Any) -> bool:
"""
Check if value exists
Args:
ht: Hash table
value: Value to check
Returns:
True if value exists
"""
return value in ht.values()
def get_size(ht: Dict[Any, Any]) -> int:
"""
Get hash table size
Args:
ht: Hash table
Returns:
Number of key-value pairs
"""
return len(ht)
def is_empty(ht: Dict[Any, Any]) -> bool:
"""
Check if hash table is empty
Args:
ht: Hash table
Returns:
True if empty
"""
return len(ht) == 0
def clear_hash_table(ht: Dict[Any, Any]) -> None:
"""
Clear all entries
Args:
ht: Hash table
"""
ht.clear()
def get_keys(ht: Dict[Any, Any]) -> List[Any]:
"""
Get all keys
Args:
ht: Hash table
Returns:
List of keys
"""
return list(ht.keys())
def get_values(ht: Dict[Any, Any]) -> List[Any]:
"""
Get all values
Args:
ht: Hash table
Returns:
List of values
"""
return list(ht.values())
def get_items(ht: Dict[Any, Any]) -> List[tuple]:
"""
Get all key-value pairs
Args:
ht: Hash table
Returns:
List of tuples
"""
return list(ht.items())
# 2. Advanced Operations
def update_hash_table(ht: Dict[Any, Any], other: Dict[Any, Any]) -> None:
"""
Update with another dictionary
Args:
ht: Target hash table
other: Source dictionary
"""
ht.update(other)
def merge_hash_tables(ht1: Dict[Any, Any], ht2: Dict[Any, Any]) -> Dict[Any, Any]:
"""
Merge two hash tables
Args:
ht1: First hash table
ht2: Second hash table
Returns:
Merged hash table
"""
result = ht1.copy()
result.update(ht2)
return result
def set_default(ht: Dict[Any, Any], key: Any, default: Any) -> Any:
"""
Set default value if key doesn't exist
Args:
ht: Hash table
key: Key
default: Default value
Returns:
Value (existing or default)
"""
return ht.setdefault(key, default)
def pop_value(ht: Dict[Any, Any], key: Any, default: Any = None) -> Any:
"""
Remove and return value
Args:
ht: Hash table
key: Key
default: Default if key not found
Returns:
Removed value or default
"""
return ht.pop(key, default)
def pop_item(ht: Dict[Any, Any]) -> tuple:
"""
Remove and return arbitrary item
Args:
ht: Hash table
Returns:
(key, value) tuple
"""
return ht.popitem()
# 3. Dictionary Comprehensions
def create_from_keys(keys: List[Any], value: Any) -> Dict[Any, Any]:
"""
Create dict from keys with same value
Args:
keys: List of keys
value: Value for all keys
Returns:
Dictionary
"""
return {key: value for key in keys}
def create_from_mapping(keys: List[Any], func: Callable[[Any], Any]) -> Dict[Any, Any]:
"""
Create dict by mapping keys through function
Args:
keys: List of keys
func: Function to generate values
Returns:
Dictionary
"""
return {key: func(key) for key in keys}
def filter_hash_table(ht: Dict[Any, Any], predicate: Callable[[tuple], bool]) -> Dict[Any, Any]:
"""
Filter entries by predicate
Args:
ht: Hash table
predicate: Filter function
Returns:
Filtered dictionary
"""
return {k: v for k, v in ht.items() if predicate((k, v))}
def invert_hash_table(ht: Dict[Any, Any]) -> Dict[Any, Any]:
"""
Invert key-value pairs
Args:
ht: Hash table
Returns:
Inverted dictionary
"""
return {v: k for k, v in ht.items()}
# 4. Sorting Operations
def sort_by_keys(ht: Dict[Any, Any], reverse: bool = False) -> List[tuple]:
"""
Sort entries by keys
Args:
ht: Hash table
reverse: Sort descending
Returns:
Sorted list of tuples
"""
return sorted(ht.items(), key=lambda x: x[0], reverse=reverse)
def sort_by_values(ht: Dict[Any, Any], reverse: bool = False) -> List[tuple]:
"""
Sort entries by values
Args:
ht: Hash table
reverse: Sort descending
Returns:
Sorted list of tuples
"""
return sorted(ht.items(), key=lambda x: x[1], reverse=reverse)
def get_sorted_keys(ht: Dict[Any, Any], reverse: bool = False) -> List[Any]:
"""Get sorted keys"""
return sorted(ht.keys(), reverse=reverse)
def get_sorted_values(ht: Dict[Any, Any], reverse: bool = False) -> List[Any]:
"""Get sorted values"""
return sorted(ht.values(), reverse=reverse)
# 5. Lookup Operations
def find_keys_by_value(ht: Dict[Any, Any], value: Any) -> List[Any]:
"""
Find all keys with given value
Args:
ht: Hash table
value: Value to search
Returns:
List of keys
"""
return [k for k, v in ht.items() if v == value]
def find_max_value(ht: Dict[Any, Any]) -> tuple:
"""
Find entry with maximum value
Args:
ht: Hash table
Returns:
(key, value) tuple
"""
return max(ht.items(), key=lambda x: x[1])
def find_min_value(ht: Dict[Any, Any]) -> tuple:
"""
Find entry with minimum value
Args:
ht: Hash table
Returns:
(key, value) tuple
"""
return min(ht.items(), key=lambda x: x[1])
# 6. Hash Table Utilities
def copy_hash_table(ht: Dict[Any, Any]) -> Dict[Any, Any]:
"""
Create shallow copy
Args:
ht: Hash table
Returns:
Copy
"""
return ht.copy()
def deep_copy_hash_table(ht: Dict[Any, Any]) -> Dict[Any, Any]:
"""
Create deep copy
Args:
ht: Hash table
Returns:
Deep copy
"""
import copy
return copy.deepcopy(ht)
def to_string(ht: Dict[Any, Any], indent: int = 0) -> str:
"""
Convert to formatted string
Args:
ht: Hash table
indent: Indentation level
Returns:
Formatted string
"""
import json
return json.dumps(ht, indent=indent, default=str)
def from_tuples(items: List[tuple]) -> Dict[Any, Any]:
"""
Create dict from list of tuples
Args:
items: List of (key, value) tuples
Returns:
Dictionary
"""
return dict(items)
def from_lists(keys: List[Any], values: List[Any]) -> Dict[Any, Any]:
"""
Create dict from two lists
Args:
keys: List of keys
values: List of values
Returns:
Dictionary
"""
return dict(zip(keys, values))
# 7. Specialized Hash Tables
def create_counter(items: List[Any]) -> Dict[Any, int]:
"""
Count occurrences
Args:
items: List of items
Returns:
Dictionary with counts
"""
counter = {}
for item in items:
counter[item] = counter.get(item, 0) + 1
return counter
def create_index(items: List[Any], key_func: Callable[[Any], Any]) -> Dict[Any, List[Any]]:
"""
Create index by key function
Args:
items: List of items
key_func: Function to extract key
Returns:
Dictionary mapping keys to lists of items
"""
index = {}
for item in items:
key = key_func(item)
if key not in index:
index[key] = []
index[key].append(item)
return index
def group_by(items: List[Any], key_func: Callable[[Any], Any]) -> Dict[Any, List[Any]]:
"""
Group items by key function
Args:
items: List of items
key_func: Function to extract key
Returns:
Grouped dictionary
"""
groups = {}
for item in items:
key = key_func(item)
if key not in groups:
groups[key] = []
groups[key].append(item)
return groups
# 8. Nested Dictionary Operations
def get_nested(ht: Dict[Any, Any], *keys, default: Any = None) -> Any:
"""
Get value from nested dictionary
Args:
ht: Hash table
*keys: Keys for nested access
default: Default value
Returns:
Nested value or default
"""
current = ht
for key in keys:
if isinstance(current, dict) and key in current:
current = current[key]
else:
return default
return current
def set_nested(ht: Dict[Any, Any], *keys, value: Any) -> None:
"""
Set value in nested dictionary
Args:
ht: Hash table
*keys: Keys for nested access
value: Value to set
"""
current = ht
for key in keys[:-1]:
if key not in current:
current[key] = {}
current = current[key]
current[keys[-1]] = value
def flatten_nested_dict(ht: Dict[Any, Any], parent_key: str = '', sep: str = '.') -> Dict[Any, Any]:
"""
Flatten nested dictionary
Args:
ht: Hash table
parent_key: Parent key prefix
sep: Separator for keys
Returns:
Flattened dictionary
"""
items = []
for k, v in ht.items():
new_key = f"{parent_key}{sep}{k}" if parent_key else k
if isinstance(v, dict):
items.extend(flatten_nested_dict(v, new_key, sep=sep).items())
else:
items.append((new_key, v))
return dict(items)
# Usage Examples
def demonstrate_hash_table():
print("=== Web Python Hash Table Examples ===\n")
# 1. Basic operations
print("--- 1. Basic Operations ---")
ht = create_hash_table({'name': 'Alice', 'age': 30})
print(f"Created: {ht}")
put(ht, 'city', 'NYC')
print(f"After put: {ht}")
print(f"Get name: {get(ht, 'name')}")
print(f"Contains 'age': {contains_key(ht, 'age')}")
print(f"Keys: {get_keys(ht)}")
print(f"Values: {get_values(ht)}")
print(f"Size: {get_size(ht)}")
# 2. Advanced operations
print("\n--- 2. Advanced Operations ---")
ht1 = {'a': 1, 'b': 2}
ht2 = {'c': 3, 'd': 4}
merged = merge_hash_tables(ht1, ht2)
print(f"Merged: {merged}")
set_default(ht1, 'e', 5)
print(f"Set default: {ht1}")
inverted = invert_hash_table({'a': 1, 'b': 2, 'c': 3})
print(f"Inverted: {inverted}")
# 3. Sorting
print("\n--- 3. Sorting ---")
data = {'apple': 5, 'banana': 2, 'cherry': 8, 'date': 1}
print(f"Original: {data}")
print(f"Sort by keys: {sort_by_keys(data)}")
print(f"Sort by values: {sort_by_values(data)}")
print(f"Max value: {find_max_value(data)}")
print(f"Min value: {find_min_value(data)}")
# 4. Lookup operations
print("\n--- 4. Lookup Operations ---")
scores = {'Alice': 95, 'Bob': 87, 'Charlie': 95, 'David': 92}
print(f"Scores: {scores}")
print(f"Keys with value 95: {find_keys_by_value(scores, 95)}")
# 5. Specialized dictionaries
print("\n--- 5. Specialized Dictionaries ---")
items = ['apple', 'banana', 'apple', 'cherry', 'banana', 'apple']
counter = create_counter(items)
print(f"Counter: {counter}")
data = [
{'name': 'Alice', 'dept': 'IT'},
{'name': 'Bob', 'dept': 'HR'},
{'name': 'Charlie', 'dept': 'IT'}
]
grouped = group_by(data, lambda x: x['dept'])
print(f"Grouped by dept: {grouped}")
# 6. Nested dictionaries
print("\n--- 6. Nested Dictionaries ---")
nested = {
'user': {
'name': 'Alice',
'address': {
'city': 'NYC',
'zip': '10001'
}
}
}
print(f"Nested: {nested}")
print(f"Get nested: {get_nested(nested, 'user', 'address', 'city')}")
set_nested(nested, 'user', 'address', 'zip', value='10002')
print(f"After set: {nested}")
print(f"Flattened: {flatten_nested_dict(nested)}")
print("\n=== All Hash Table Examples Completed ===")
# Export functions
export { create_hash_table, put, get, remove, contains_key, contains_value }
export { get_size, is_empty, clear_hash_table, get_keys, get_values, get_items }
export { update_hash_table, merge_hash_tables, set_default, pop_value, pop_item }
export { create_from_keys, create_from_mapping, filter_hash_table, invert_hash_table }
export { sort_by_keys, sort_by_values, get_sorted_keys, get_sorted_values }
export { find_keys_by_value, find_max_value, find_min_value }
export { copy_hash_table, deep_copy_hash_table, to_string, from_tuples, from_lists }
export { create_counter, create_index, group_by }
export { get_nested, set_nested, flatten_nested_dict }
export { demonstrate_hash_table }
💻 Verkettete Liste python
🔴 complex
⭐⭐⭐⭐
Einfach verkettete Listen implementieren und verwenden mit Einfügungs-, Lösch-, Durchlauf- und Umkehrungsoperationen
⏱️ 35 min
🏷️ python, web, data structures, linked list
Prerequisites:
Advanced Python, Classes, Pointers
# Web Python Linked List Examples
# Implementation of singly linked list with comprehensive operations
# 1. Node Class
class Node:
"""Linked list node"""
def __init__(self, data: Any = None):
self.data = data
self.next: Optional['Node'] = None
def __repr__(self):
return f"Node({self.data})"
# 2. Linked List Class
class LinkedList:
"""Singly linked list implementation"""
def __init__(self):
self.head: Optional[Node] = None
self.size = 0
def __repr__(self):
values = []
current = self.head
while current:
values.append(str(current.data))
current = current.next
return " -> ".join(values) if values else "Empty List"
def __len__(self):
return self.size
def __iter__(self):
current = self.head
while current:
yield current.data
current = current.next
# 3. Insertion Operations
def append(self, data: Any) -> None:
"""
Append element to end
Args:
data: Data to append
"""
new_node = Node(data)
if not self.head:
self.head = new_node
else:
current = self.head
while current.next:
current = current.next
current.next = new_node
self.size += 1
def prepend(self, data: Any) -> None:
"""
Add element to beginning
Args:
data: Data to prepend
"""
new_node = Node(data)
new_node.next = self.head
self.head = new_node
self.size += 1
def insert_at(self, index: int, data: Any) -> bool:
"""
Insert element at index
Args:
index: Insertion index
data: Data to insert
Returns:
True if successful
"""
if index < 0 or index > self.size:
return False
if index == 0:
self.prepend(data)
return True
new_node = Node(data)
current = self.head
for _ in range(index - 1):
current = current.next
new_node.next = current.next
current.next = new_node
self.size += 1
return True
def insert_after(self, target_data: Any, new_data: Any) -> bool:
"""
Insert after target element
Args:
target_data: Target element data
new_data: New element data
Returns:
True if successful
"""
current = self.head
while current:
if current.data == target_data:
new_node = Node(new_data)
new_node.next = current.next
current.next = new_node
self.size += 1
return True
current = current.next
return False
def insert_before(self, target_data: Any, new_data: Any) -> bool:
"""
Insert before target element
Args:
target_data: Target element data
new_data: New element data
Returns:
True if successful
"""
if not self.head:
return False
if self.head.data == target_data:
self.prepend(new_data)
return True
current = self.head
while current.next:
if current.next.data == target_data:
new_node = Node(new_data)
new_node.next = current.next
current.next = new_node
self.size += 1
return True
current = current.next
return False
# 4. Deletion Operations
def delete(self, data: Any) -> bool:
"""
Delete first occurrence of data
Args:
data: Data to delete
Returns:
True if deleted
"""
if not self.head:
return False
if self.head.data == data:
self.head = self.head.next
self.size -= 1
return True
current = self.head
while current.next:
if current.next.data == data:
current.next = current.next.next
self.size -= 1
return True
current = current.next
return False
def delete_at(self, index: int) -> bool:
"""
Delete element at index
Args:
index: Index to delete
Returns:
True if deleted
"""
if index < 0 or index >= self.size:
return False
if index == 0:
self.head = self.head.next
self.size -= 1
return True
current = self.head
for _ in range(index - 1):
current = current.next
current.next = current.next.next
self.size -= 1
return True
def delete_head(self) -> bool:
"""
Delete head element
Returns:
True if deleted
"""
if not self.head:
return False
self.head = self.head.next
self.size -= 1
return True
def delete_tail(self) -> bool:
"""
Delete tail element
Returns:
True if deleted
"""
if not self.head:
return False
if not self.head.next:
self.head = None
else:
current = self.head
while current.next.next:
current = current.next
current.next = None
self.size -= 1
return True
# 5. Search Operations
def find(self, data: Any) -> Optional[Node]:
"""
Find node containing data
Args:
data: Data to find
Returns:
Node or None
"""
current = self.head
while current:
if current.data == data:
return current
current = current.next
return None
def contains(self, data: Any) -> bool:
"""
Check if data exists
Args:
data: Data to check
Returns:
True if exists
"""
return self.find(data) is not None
def index_of(self, data: Any) -> int:
"""
Get index of data
Args:
data: Data to find
Returns:
Index or -1
"""
current = self.head
index = 0
while current:
if current.data == data:
return index
current = current.next
index += 1
return -1
def get_at(self, index: int) -> Optional[Any]:
"""
Get data at index
Args:
index: Index
Returns:
Data or None
"""
if index < 0 or index >= self.size:
return None
current = self.head
for _ in range(index):
current = current.next
return current.data
# 6. Traversal Operations
def to_list(self) -> list:
"""
Convert to Python list
Returns:
List of data
"""
result = []
current = self.head
while current:
result.append(current.data)
current = current.next
return result
def traverse(self, func: callable) -> None:
"""
Apply function to each element
Args:
func: Function to apply
"""
current = self.head
while current:
func(current.data)
current = current.next
def print_list(self) -> None:
"""Print linked list"""
print(self)
# 7. Update Operations
def update(self, index: int, new_data: Any) -> bool:
"""
Update data at index
Args:
index: Index
new_data: New data
Returns:
True if updated
"""
if index < 0 or index >= self.size:
return False
current = self.head
for _ in range(index):
current = current.next
current.data = new_data
return True
# 8. Utility Operations
def is_empty(self) -> bool:
"""
Check if list is empty
Returns:
True if empty
"""
return self.head is None
def clear(self) -> None:
"""Clear all elements"""
self.head = None
self.size = 0
def reverse(self) -> None:
"""Reverse the linked list"""
prev = None
current = self.head
while current:
next_node = current.next
current.next = prev
prev = current
current = next_node
self.head = prev
def get_length(self) -> int:
"""
Get length of list
Returns:
Length
"""
return self.size
def copy(self) -> 'LinkedList':
"""
Create shallow copy
Returns:
New linked list
"""
new_list = LinkedList()
current = self.head
while current:
new_list.append(current.data)
current = current.next
return new_list
# 9. Advanced Operations
def count(self, data: Any) -> int:
"""
Count occurrences of data
Args:
data: Data to count
Returns:
Count
"""
count = 0
current = self.head
while current:
if current.data == data:
count += 1
current = current.next
return count
def remove_duplicates(self) -> None:
"""Remove duplicate elements"""
seen = set()
current = self.head
prev = None
while current:
if current.data in seen:
prev.next = current.next
self.size -= 1
else:
seen.add(current.data)
prev = current
current = current.next
def sort(self, reverse: bool = False) -> None:
"""
Sort the linked list
Args:
reverse: Sort descending
"""
# Convert to list, sort, and rebuild
data_list = self.to_list()
data_list.sort(reverse=reverse)
self.clear()
for item in data_list:
self.append(item)
def find_middle(self) -> Optional[Any]:
"""
Find middle element
Returns:
Middle data or None
"""
if not self.head:
return None
slow = self.head
fast = self.head
while fast and fast.next:
slow = slow.next
fast = fast.next.next
return slow.data
def has_cycle(self) -> bool:
"""
Detect cycle using Floyd's algorithm
Returns:
True if cycle exists
"""
if not self.head:
return False
slow = self.head
fast = self.head
while fast and fast.next:
slow = slow.next
fast = fast.next.next
if slow == fast:
return True
return False
# 10. Static Creation Methods
@classmethod
def from_list(cls, data_list: list) -> 'LinkedList':
"""
Create linked list from Python list
Args:
data_list: List of data
Returns:
New linked list
"""
linked_list = cls()
for item in data_list:
linked_list.append(item)
return linked_list
# 11. Utility Functions
def merge_sorted_lists(list1: LinkedList, list2: LinkedList) -> LinkedList:
"""
Merge two sorted linked lists
Args:
list1: First sorted list
list2: Second sorted list
Returns:
Merged sorted list
"""
merged = LinkedList()
current1 = list1.head
current2 = list2.head
while current1 and current2:
if current1.data <= current2.data:
merged.append(current1.data)
current1 = current1.next
else:
merged.append(current2.data)
current2 = current2.next
while current1:
merged.append(current1.data)
current1 = current1.next
while current2:
merged.append(current2.data)
current2 = current2.next
return merged
def detect_intersection(list1: LinkedList, list2: LinkedList) -> Optional[Any]:
"""
Detect intersection point of two lists
Args:
list1: First list
list2: Second list
Returns:
Intersection data or None
"""
# Get lengths
len1, len2 = len(list1), len(list2)
# Find starting points
current1 = list1.head
current2 = list2.head
# Advance longer list
for _ in range(abs(len1 - len2)):
if len1 > len2:
current1 = current1.next
else:
current2 = current2.next
# Move both until intersection
while current1 and current2:
if current1 == current2:
return current1.data
current1 = current1.next
current2 = current2.next
return None
# Usage Examples
def demonstrate_linked_list():
print("=== Web Python Linked List Examples ===\n")
# 1. Basic operations
print("--- 1. Basic Operations ---")
ll = LinkedList()
ll.append(1)
ll.append(2)
ll.append(3)
print(f"After append: {ll}")
ll.prepend(0)
print(f"After prepend: {ll}")
print(f"Length: {ll.get_length()}")
print(f"Is empty: {ll.is_empty()}")
# 2. Insertion
print("\n--- 2. Insertion ---")
ll.insert_at(2, 1.5)
print(f"After insert at 2: {ll}")
ll.insert_after(2, 2.5)
print(f"After insert after 2: {ll}")
# 3. Deletion
print("\n--- 3. Deletion ---")
ll.delete(1.5)
print(f"After delete 1.5: {ll}")
ll.delete_at(0)
print(f"After delete at 0: {ll}")
ll.delete_head()
print(f"After delete head: {ll}")
# 4. Search
print("\n--- 4. Search ---")
ll = LinkedList.from_list([10, 20, 30, 40, 50])
print(f"List: {ll}")
print(f"Contains 30: {ll.contains(30)}")
print(f"Index of 30: {ll.index_of(30)}")
print(f"Get at 2: {ll.get_at(2)}")
print(f"Find middle: {ll.find_middle()}")
# 5. Traversal
print("\n--- 5. Traversal ---")
print("Traverse with print:")
ll.traverse(lambda x: print(f" Item: {x}"))
print(f"To list: {ll.to_list()}")
# 6. Update
print("\n--- 6. Update ---")
ll.update(2, 35)
print(f"After update index 2: {ll}")
# 7. Advanced operations
print("\n--- 7. Advanced Operations ---")
ll = LinkedList.from_list([3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5])
print(f"Original: {ll}")
print(f"Count of 5: {ll.count(5)}")
ll.remove_duplicates()
print(f"After remove duplicates: {ll}")
ll.reverse()
print(f"After reverse: {ll}")
ll.sort()
print(f"After sort: {ll}")
# 8. Merge
print("\n--- 8. Merge Sorted Lists ---")
list1 = LinkedList.from_list([1, 3, 5, 7])
list2 = LinkedList.from_list([2, 4, 6, 8])
print(f"List1: {list1}")
print(f"List2: {list2}")
merged = merge_sorted_lists(list1, list2)
print(f"Merged: {merged}")
# 9. Create from list
print("\n--- 9. Create From List ---")
data = [100, 200, 300, 400]
ll_from_list = LinkedList.from_list(data)
print(f"From list {data}: {ll_from_list}")
# 10. Cycle detection
print("\n--- 10. Cycle Detection ---")
ll = LinkedList.from_list([1, 2, 3, 4])
print(f"List: {ll}")
print(f"Has cycle: {ll.has_cycle()}")
print("\n=== All Linked List Examples Completed ===")
# Export classes and functions
export { Node, LinkedList }
export { merge_sorted_lists, detect_intersection, demonstrate_linked_list }