marimo-learn / Python /phase_1 /collections.py
Haleshot's picture
Add interactive Python collections tutorial
971ae9c unverified
raw
history blame
6.31 kB
# /// script
# requires-python = ">=3.10"
# dependencies = [
# "marimo",
# ]
# ///
import marimo
__generated_with = "0.10.14"
app = marimo.App()
@app.cell
def _():
import marimo as mo
return (mo,)
@app.cell(hide_code=True)
def _(mo):
mo.md(
"""
# πŸ“¦ Collections in Python
Explore Python's built-in collection types β€” the essential data structures!
## Lists
Lists are ordered, mutable sequences. Create them using square brackets:
```python
fruits = ["apple", "banana", "orange"]
numbers = [1, 2, 3, 4, 5]
mixed = [1, "hello", 3.14, True] # Can contain different types
```
Below is an example list we'll use to explore operations.
"""
)
return
@app.cell
def _():
sample_list = [1, 2, 3, 4, 5]
return (sample_list,)
@app.cell(hide_code=True)
def _(mo):
mo.md(
"""
## List Operations
Here are common operations you can perform on lists.
Try changing the values in `sample_list` above and watch the results change.
"""
)
return
@app.cell
def _(sample_list):
len(sample_list) # List length
return
@app.cell
def _(sample_list):
sample_list.append(6) # Add item to end
sample_list
return
@app.cell
def _(sample_list):
sample_list[0] # Access first element
return
@app.cell
def _(sample_list):
sample_list[-1] # Access last element
return
@app.cell(hide_code=True)
def _(mo):
mo.md(
"""
### Try marimo's Array Interface!
Explore how marimo handles arrays with this interactive element:
"""
)
return
@app.cell
def _(mo):
item = mo.ui.text(placeholder="Enter list item")
items = mo.ui.array([item] * 3, label="Create a list of 3 items")
return item, items
@app.cell
def _(items, mo):
mo.hstack(
[
items,
mo.md(f"Your list: {items.value}")
],
justify="space-between"
)
return
@app.cell(hide_code=True)
def _(mo):
_text = mo.md("""
- Try entering different types of items
- Watch how the list updates in real-time
This is a great way to experiment with list creation!
""")
mo.accordion({"πŸ’‘ Interactive List Builder Tips": _text})
return
@app.cell(hide_code=True)
def _(mo):
mo.md(
"""
## Tuples
Tuples are immutable sequences. They're like lists that can't be changed after creation:
"""
)
return
@app.cell
def _():
coordinates = (10, 20)
return (coordinates,)
@app.cell
def _(coordinates):
x, y = coordinates # Tuple unpacking
x
return x, y
@app.cell(hide_code=True)
def _(mo):
mo.md(
"""
## Dictionaries
Dictionaries store key-value pairs. They're perfect for mapping relationships:
"""
)
return
@app.cell
def _():
person = {
"name": "John Doe",
"age": 25,
"city": "New York"
}
return (person,)
@app.cell
def _(person):
person["name"] # Access value by key
return
@app.cell
def _(person):
person.keys() # Get all keys
return
@app.cell
def _(person):
person.values() # Get all values
return
@app.cell(hide_code=True)
def _(mo):
mo.md(
"""
### Try marimo's Dictionary Interface!
Create your own dictionary using marimo's interactive elements:
"""
)
return
@app.cell
def _(mo):
key1 = mo.ui.text(placeholder="Key 1")
value1 = mo.ui.text(placeholder="Value 1")
key2 = mo.ui.text(placeholder="Key 2")
value2 = mo.ui.text(placeholder="Value 2")
dictionary = mo.ui.dictionary(
{
"First key": key1,
"First value": value1,
"Second key": key2,
"Second value": value2,
}
)
return dictionary, key1, key2, value1, value2
@app.cell
def _(dictionary, mo):
mo.hstack(
[
dictionary,
mo.md(f"Your dictionary: {dictionary.value}")
],
justify="space-between"
)
return
@app.cell(hide_code=True)
def _(mo):
_text = mo.md("""Enter key-value pairs to build your dictionary
- Watch how the dictionary updates as you type
- Try different types of values
This interactive builder helps understand dictionary structure!
""")
mo.accordion({"πŸ’‘ Dictionary Builder Tips": _text})
return
@app.cell(hide_code=True)
def _(mo):
mo.md(
"""
## Sets
Sets are unordered collections of unique elements:
"""
)
return
@app.cell
def _():
numbers_set = {1, 2, 3, 3, 2, 1} # Duplicates are removed
return (numbers_set,)
@app.cell
def _(numbers_set):
numbers_set.add(4) # Add new element
numbers_set
return
@app.cell
def _():
set1 = {1, 2, 3}
set2 = {3, 4, 5}
set1.intersection(set2) # Find common elements
return set1, set2
@app.cell(hide_code=True)
def _(mo):
mo.md(
"""
## Collection Methods and Operations
Here are some common operations across collections:
```python
# Lists
my_list = [1, 2, 3]
my_list.insert(0, 0) # Insert at position
my_list.remove(2) # Remove first occurrence
my_list.sort() # Sort in place
sorted_list = sorted(my_list) # Return new sorted list
# Dictionaries
my_dict = {"a": 1}
my_dict.update({"b": 2}) # Add new key-value pairs
my_dict.get("c", "Not found") # Safe access with default
# Sets
set_a = {1, 2, 3}
set_b = {3, 4, 5}
set_a.union(set_b) # Combine sets
set_a.difference(set_b) # Elements in A but not in B
```
"""
)
return
@app.cell(hide_code=True)
def _(mo):
callout_text = mo.md("""
## Collection Mastery Awaits!
Next Steps:
- Practice list and dictionary comprehensions
- Experiment with nested collections
- Try combining different collection types
Keep organizing data! πŸ—ƒοΈβœ¨
""")
mo.callout(callout_text, kind="success")
return (callout_text,)
if __name__ == "__main__":
app.run()