基于Python的数据科学系列(3):元组和字典

引言

        在前两篇文章中,我们讨论了Python中的基本数据类型和列表操作。本文将深入探讨Python中的元组和字典。元组和字典是Python中常用的数据结构,各自有其独特的用途和特点。了解这些数据结构将有助于我们编写更高效、更可靠的代码。

元组

        元组类似于列表,但一旦创建,它们就不能被修改,这意味着它们是不可变的

  1. 不能向元组添加元素,因此没有 extend 或 append 方法。
  2. 不能删除或插入元素,因此没有 insert、remove 或 pop 方法。
  3. 可以使用 in 运算符或索引进行查找。
  4. 元组的速度比列表快得多。

        元组适用于需要保护的数据。在Python中,使用(..., ..., ...)..., ...语法来创建元组:

创建元组
point  = (10, 20)
point2 = 10, 20
print("1: ", point, type(point))
print("2: ", point2, type(point2))
解包元组
x, y = point
print("1: x =", x)
print("2: y =", y)
元组不可变
# point[0] = 20  # 这会报错

字典

        字典类似于列表,但每个元素都是一个键值对。字典的语法是{key1 : value1, ...}

创建字典
some_dict = {"Pineapple" : 12,
             "Orange" : 10,
             "Apple" : 15,}

print("1: ", type(some_dict))
print("2: ", some_dict)
访问字典元素
print("1: Pineapple = " + str(some_dict["Pineapple"]))
print("2: Orange = " + str(some_dict["Orange"]))
print("3: Apple = " + str(some_dict["Apple"]))
添加新键值对
some_dict["Durian"] = 50
遍历字典
for key in some_dict:
    print("1:", key + " = " + str(some_dict[key]))

# 使用 items() 方法
for key, value in some_dict.items():
    print("2:", key, value)
    
# 使用 sorted() 方法
for key, value in sorted(some_dict.items()):
    print("3:", key, value)
    
# 使用 enumerate 方法
for index, (key, value) in enumerate(some_dict.items()):
    print("4:", index, key, value)

集合

        集合是一种无序且不重复的数据结构。

set_a = {'d','e','a','a','a','b','b','c','a'}
print(set_a)  # 删除所有重复的成员
print(len(set_a))  # 计算唯一成员的总数

set_a = set({'a','b','c','d'})  # 可以使用 `set` 构造函数显式声明集合
set_b = set(['a','b','c','c','d','d'])  # 列表也可以转换为集合

print(f"{set_a=}")
print(f"{set_b=}")

# 两个集合相等当且仅当 set_a 是 set_b 的子集且 set_b 是 set_a 的子集。记住了吗?
print("Is set_a is subset of set_b:", set_a.issubset(set_b))
print("Is set_b is subset of set_a:", set_b.issubset(set_a))

# 或者直接使用比较运算符
print("Is set_a and set_b are the same:", set_a == set_b)

# 集合对象有我们都喜欢的基本函数/操作。
print("Intersection:", set_a.intersection(set_b))
print("Union:", set_a.union(set_b))
print("Difference:", set_a.difference(set_b), "is an empty set")

Python 集合类型

        我们已经完成了Python中的四种基本集合类型。它们之间的区别如下:

  • 列表 是一个有序且可变的集合。允许重复成员。
  • 元组 是一个有序且不可变的集合。允许重复成员。
  • 集合 是一个无序、不可变且未索引的集合。没有重复成员。
  • 字典 是一个有序且可变的集合。没有重复成员。

        这些集合类型各自有其特定的用途。了解每种数据结构的特点,可以帮助我们选择最适合当前任务的工具。

=== 任务 4 ===

  1. 创建一个包含年龄、性别和身高的元组变量,然后尝试打印该元组变量的性别。

  2. 创建一个包含年龄、姓名、性别和ID号的字典。遍历字典并打印键值对。

  3. 给定一个整数n,编写一个程序生成一个包含 (i, i*i) 的字典,其中i是1到n之间的整数(包括1和n)。程序应打印生成的字典。例如,给定输入8,输出应为:

     {1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64}
    
  4. 编写一个程序,按升序排序 (name, age, height) 元组,其中name是字符串,age和height是数字。排序标准是:

    • 首先按name排序;
    • 然后按age排序;
    • 最后按height排序。

    如果给定以下元组作为输入:

     Tom,19,80
     John,20,90
     Jony,17,91
     Jony,17,93
     Json,21,85
    

    程序输出应为:

     [('John', '20', '90'), ('Jony', '17', '91'), ('Jony', '17', '93'), ('Json', '21', '85'), ('Tom', '19', '80')]
    

    提示:使用itemgetter启用多个排序键。此外,sorted接收一个名为key的参数。因此,可以使用 sorted(the_tuple, key = itemgetter(0,1,2)),其中0, 1, 2对应name, age, height。

  5. 编写一个函数,接受以下参数:

    • name和age,其中name是默认值为"N/A"的关键字参数;
    • 一个未知长度的家庭工资列表(例如20000, 30000, 10000)。长度未知是因为我们永远不知道任何家庭的大小。提示:使用*args
    • 一个包含孩子及其学校名称的字典(例如,Peter = 'Saint Peter', John = 'Pattaya International School')。长度未知。提示:使用*kwargs

    以任何首选格式打印所有信息。例如,

    some_func(30, 30000, 40000, name='Chaky', John="some_school", Peter="another_school")

    应打印:

     Chaky has age of 30 with family salary of 70000
     The school of John is some_school
     The school of Peter is another_school
    

    提示:在处理多种类型的参数时,重要的是保持参数的顺序,否则会出现语法错误:

    def example2(arg_1, arg_2, *args, kw_1="something", kw_2="something", **kwargs)

    其中arg_1和arg_2是普通参数,*args是可变长度参数,kw_1和kw_2是关键字参数,**kwargs是字典可变长度参数。

实现代码
# 1. 创建一个包含年龄、性别和身高的元组变量,然后尝试打印该元组变量的性别。
person_info = (25, 'Male', 175)
print("Gender:", person_info[1])

# 2. 创建一个包含年龄、姓名、性别和ID号的字典。遍历字典并打印键值对。
person_dict = {
    "Age": 25,
    "Name": "John Doe",
    "Gender": "Male",
    "ID": 12345
}

for key, value in person_dict.items():
    print(f"{key}: {value}")

# 3. 给定一个整数n,编写一个程序生成一个包含 (i, i*i) 的字典,其中i是1到n之间的整数(包括1和n)。程序应打印生成的字典。
n = 8
squares_dict = {i: i * i for i in range(1, n + 1)}
print(squares_dict)

# 4. 编写一个程序,按升序排序 (name, age, height) 元组,其中name是字符串,age和height是数字。
from operator import itemgetter

people = [
    ("Tom", 19, 80),
    ("John", 20, 90),
    ("Jony", 17, 91),
    ("Jony", 17, 93),
    ("Json", 21, 85)
]

sorted_people = sorted(people, key=itemgetter(0, 1, 2))
print(sorted_people)

# 5. 编写一个函数,接受以下参数并打印所有信息。
def some_func(age, *salaries, name='N/A', **kids):
    total_salary = sum(salaries)
    print(f"{name} has age of {age} with family salary of {total_salary}")
    for kid, school in kids.items():
        print(f"The school of {kid} is {school}")

some_func(30, 30000, 40000, name='Chaky', John="some_school", Peter="another_school")

结语

        通过这篇文章,我们深入探讨了Python中的元组、字典和集合操作。我们学习了如何创建和操作这些数据结构,并通过一系列任务巩固了所学知识。元组提供了不可变的数据存储方式,适用于需要保护的数据;字典提供了键值对的数据存储方式,方便快速查找和更新;集合提供了一种无序且不重复的数据存储方式,适用于需要去重和集合操作的场景。

        掌握这些数据结构将使我们的代码更高效、更可靠。在接下来的文章中,我们将探讨异常处理、函数和类等高级特性,为大家编写复杂的Python程序打下坚实的基础。希望大家通过实践任务逐步提高编程技能,继续在数据科学的世界中探索。

如果你觉得这篇博文对你有帮助,请点赞、收藏、关注我,并且可以打赏支持我!

欢迎关注我的后续博文,我将分享更多关于人工智能、自然语言处理和计算机视觉的精彩内容。

谢谢大家的支持!

  • 18
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

会飞的Anthony

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值