集合类型 #

一、列表 (List) #

1.1 创建列表 #

mojo
def main():
    let empty_list = List[Int]()
    let numbers = List[Int](1, 2, 3, 4, 5)
    let mixed = [1, 2, 3, 4, 5]
    
    print(len(numbers))
    print(len(mixed))

main()

1.2 访问元素 #

mojo
def main():
    let fruits = ["apple", "banana", "orange"]
    
    print(fruits[0])
    print(fruits[1])
    print(fruits[-1])

main()

1.3 列表切片 #

mojo
def main():
    let numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    
    print(numbers[0:3])
    print(numbers[5:])
    print(numbers[:5])
    print(numbers[::2])
    print(numbers[::-1])

main()

1.4 修改列表 #

mojo
def main():
    var numbers = [1, 2, 3]
    
    numbers.append(4)
    print(numbers)
    
    numbers.extend([5, 6])
    print(numbers)
    
    numbers.insert(0, 0)
    print(numbers)

main()

1.5 删除元素 #

mojo
def main():
    var numbers = [1, 2, 3, 4, 5]
    
    numbers.pop()
    print(numbers)
    
    numbers.pop(0)
    print(numbers)
    
    numbers.remove(3)
    print(numbers)

main()

1.6 列表方法 #

mojo
def main():
    var numbers = [3, 1, 4, 1, 5, 9, 2, 6]
    
    numbers.sort()
    print(numbers)
    
    numbers.reverse()
    print(numbers)
    
    print(numbers.index(5))
    print(numbers.count(1))

main()

1.7 列表推导式 #

mojo
def main():
    let squares = [x * x for x in range(10)]
    print(squares)
    
    let evens = [x for x in range(20) if x % 2 == 0]
    print(evens)

main()

二、字典 (Dict) #

2.1 创建字典 #

mojo
def main():
    let empty_dict = Dict[String, Int]()
    let scores = {"Alice": 95, "Bob": 87, "Charlie": 92}
    
    print(len(scores))

main()

2.2 访问元素 #

mojo
def main():
    let scores = {"Alice": 95, "Bob": 87}
    
    print(scores["Alice"])
    print(scores.get("Bob"))
    print(scores.get("Charlie", 0))

main()

2.3 修改字典 #

mojo
def main():
    var scores = {"Alice": 95}
    
    scores["Bob"] = 87
    print(scores)
    
    scores["Alice"] = 98
    print(scores)
    
    scores.update({"Charlie": 92, "David": 88})
    print(scores)

main()

2.4 删除元素 #

mojo
def main():
    var scores = {"Alice": 95, "Bob": 87, "Charlie": 92}
    
    del scores["Bob"]
    print(scores)
    
    let value = scores.pop("Alice")
    print(value)
    print(scores)

main()

2.5 遍历字典 #

mojo
def main():
    let scores = {"Alice": 95, "Bob": 87, "Charlie": 92}
    
    for key in scores.keys():
        print(key)
    
    for value in scores.values():
        print(value)
    
    for key, value in scores.items():
        print(f"{key}: {value}")

main()

2.6 字典推导式 #

mojo
def main():
    let squares = {x: x * x for x in range(5)}
    print(squares)

main()

三、集合 (Set) #

3.1 创建集合 #

mojo
def main():
    let empty_set = Set[Int]()
    let numbers = {1, 2, 3, 4, 5}
    
    print(len(numbers))

main()

3.2 集合操作 #

mojo
def main():
    var numbers = {1, 2, 3}
    
    numbers.add(4)
    print(numbers)
    
    numbers.remove(1)
    print(numbers)
    
    numbers.discard(10)

main()

3.3 集合运算 #

mojo
def main():
    let a = {1, 2, 3, 4}
    let b = {3, 4, 5, 6}
    
    print(a | b)
    print(a & b)
    print(a - b)
    print(a ^ b)

main()

3.4 集合判断 #

mojo
def main():
    let a = {1, 2, 3}
    let b = {1, 2}
    
    print(b.issubset(a))
    print(a.issuperset(b))
    print(a.isdisjoint({4, 5}))

main()

四、元组 (Tuple) #

4.1 创建元组 #

mojo
def main():
    let point = (10, 20)
    let person = ("Alice", 30, "Engineer")
    let single = (42,)
    
    print(point)
    print(person)
    print(single)

main()

4.2 访问元组 #

mojo
def main():
    let person = ("Alice", 30, "Engineer")
    
    print(person[0])
    print(person[1])
    print(person[-1])

main()

4.3 元组解包 #

mojo
def main():
    let point = (10, 20)
    let x, y = point
    
    print(x)
    print(y)

main()

4.4 命名元组 #

mojo
struct Point:
    var x: Int
    var y: Int
    
    fn __init__(inout self, x: Int, y: Int):
        self.x = x
        self.y = y

def main():
    let p = Point(10, 20)
    print(p.x, p.y)

main()

五、范围 (Range) #

5.1 创建范围 #

mojo
def main():
    let r1 = range(5)
    let r2 = range(2, 8)
    let r3 = range(0, 10, 2)
    
    for i in r1:
        print(i)
    
    for i in r3:
        print(i)

main()

5.2 范围属性 #

mojo
def main():
    let r = range(2, 10, 2)
    
    print(r.start)
    print(r.stop)
    print(r.step)
    print(len(r))

main()

六、迭代器 #

6.1 基本迭代 #

mojo
def main():
    let numbers = [1, 2, 3, 4, 5]
    
    for num in numbers:
        print(num)

main()

6.2 枚举 #

mojo
def main():
    let fruits = ["apple", "banana", "orange"]
    
    for index, fruit in enumerate(fruits):
        print(f"{index}: {fruit}")

main()

6.3 并行迭代 #

mojo
def main():
    let names = ["Alice", "Bob", "Charlie"]
    let ages = [25, 30, 35]
    
    for name, age in zip(names, ages):
        print(f"{name} is {age} years old")

main()

七、集合性能 #

7.1 时间复杂度 #

操作 List Dict Set
访问 O(1) O(1) -
查找 O(n) O(1) O(1)
插入 O(n) O(1) O(1)
删除 O(n) O(1) O(1)

7.2 选择指南 #

  • List:有序数据,频繁索引访问
  • Dict:键值对映射,快速查找
  • Set:去重,集合运算
  • Tuple:不可变数据

八、总结 #

本章学习了:

  • 列表的创建与操作
  • 字典的键值映射
  • 集合的运算
  • 元组的不可变性
  • 范围与迭代器
  • 性能考量

下一章,我们将学习控制流。

最后更新:2026-03-27