page contents

Python教程:Python列表、字典、集合高级用法!

今天咱们一起深入探索Python的三大金刚——列表(List)、字典(Dictionary)和集合(Set)的高级玩法。这些知识不仅让你的代码更加优雅,还能在解决复杂问题时大显身手哦!

attachments-2024-07-HKptBD8p66a7030c3892d.jpg今天咱们一起深入探索Python的三大金刚——列表(List)、字典(Dictionary)和集合(Set)的高级玩法。这些知识不仅让你的代码更加优雅,还能在解决复杂问题时大显身手哦!

列表:不只是简单的序列

高级索引与切片

列表支持负索引,可以快速访问列表末尾的元素。比如,my_list[-1] 就能拿到最后一个苹果。

my_list = ['apple', 'banana', 'cherry']

last_fruit = my_list[-1]  # cherry

print(last_fruit)

切片操作不仅能提取子序列,还能用来反转列表。

reversed_list = my_list[::-1]  # ['cherry', 'banana', 'apple']

print(reversed_list)

列表推导式

列表推导式是生成新列表的快捷方式,简洁且高效。

squared_numbers = [i**2 for i in range(1, 6)]  # [1, 4, 9, 16, 25]

print(squared_numbers)

使用join处理字符串列表

虽然join是字符串的方法,但与列表结合,能高效拼接字符串列表。

words = ['Hello', 'world!', 'Python']

greeting = ' '.join(words)  # Hello world! Python

print(greeting)

字典:键值对的艺术

键的不可变性与字典推导

字典的键必须是不可变类型,如字符串、数字或元组。字典推导则让创建关联数据变得轻松。

keys = ['a', 'b', 'c']

values = [1, 2, 3]

my_dict = {k: v for k, v in zip(keys, values)}

print(my_dict)  # {'a': 1, 'b': 2, 'c': 3}

获取键的默认值

避免KeyError,使用get()方法。

default_value = my_dict.get('d', 'Not Found')  # Not Found

print(default_value)

集合:无序而独特

集合是一个无序且不允许重复元素的数据结构,非常适合做成员测试和消除重复元素。

创建与交并集

集合可以通过花括号{}创建,或者使用set()函数。集合运算让数据处理变得直观。

set1 = {1, 2, 3}

set2 = {2, 3, 4}

union_set = set1.union(set2)  # {1, 2, 3, 4}

intersection_set = set1.intersection(set2)  # {2, 3}

print(union_set, intersection_set)

集合推导式

集合推导类似列表推导,用于快速创建集合。

squares_set = {i**2 for i in range(1, 4)}  # {1, 4, 9}

print(squares_set)

深入挖掘:高级技巧与最佳实践

列表与迭代器

Python的迭代器模式非常强大,iter()和next()函数让我们可以逐个访问列表元素,适用于大数据量处理,节省内存。

my_large_list = list(range(1000000))  # 大列表

iterator = iter(my_large_list)

first_item = next(iterator)  # 0

print(first_item)

列表的高效合并

当你需要合并多个列表时,itertools.chain比直接使用+或extend()方法更高效。

from itertools import chain

list1 = [1, 2, 3]

list2 = [4, 5, 6]

merged_list = list(chain(list1, list2))

print(merged_list)  # [1, 2, 3, 4, 5, 6]

字典的更新与视图

字典的update()方法可以合并两个字典,而视图对象(keys(), values(), items())提供了非列表的迭代方式,适用于遍历而不修改字典。

dict1 = {'a': 1, 'b': 2}

dict2 = {'b': 3, 'c': 4}

dict1.update(dict2)  # 合并,相同键的值会被dict2覆盖

print(dict1)  # {'a': 1, 'b': 3, 'c': 4}

# 使用视图遍历

for key in dict1.keys():

    print(key)

集合的高级操作

集合除了基本的交并差集外,还有difference_update()、symmetric_difference()等方法,用于更灵活的集合操作。

set1 = {1, 2, 3, 4}

set2 = {3, 4, 5, 6}

# 更新set1,移除同时存在于set2的元素

set1.difference_update(set2)

print(set1)  # {1, 2}

# 对称差集,即只在其中一个集合中存在的元素

sym_diff = set1.symmetric_difference(set2)

print(sym_diff)  # {1, 2, 5, 6}

性能优化小贴士

列表增长:预先确定大小时,使用list(reserve=len)初始化,避免多次扩容。

字典访问:相比in检查键,直接访问键的值更快,除非你需要确认键是否存在。

集合判断:当只需要判断元素是否存在时,集合比列表快,因为查找时间复杂度为O(1)。

综合实战:优化数据处理流程

假设我们有一个庞大的用户活动日志列表,需要按城市分组并统计活跃用户数。这将综合运用到我们前面讨论的许多技巧。

log_entries = [

    {"user_id": 1, "city": "NY"},

    {"user_id": 2, "city": "LA"},

    {"user_id": 1, "city": "NY"},

    ...  # 假设有大量数据

]

# 使用字典推导和集合来快速分组和去重

city_user_counts = {city: len(set(user_ids)) for city, user_ids in itertools.groupby(sorted(log_entries, key=lambda x: x['city']), lambda x: x['city'])}

print(city_user_counts)

在这个例子中,我们先通过sorted()函数按城市排序日志,接着使用itertools.groupby()按城市分组。对于每个城市,我们创建了一个集合来快速去除重复的用户ID,然后计算集合的长度得到活跃用户数。这是一种高效处理大量数据的方式,体现了Python数据结构的强大和灵活性。

通过这些深入的探讨与实践,希望你对Python的列表、字典和集合有了更深刻的理解,并能在实际项目中灵活运用,写出既高效又优雅的代码。

更多相关技术内容咨询欢迎前往并持续关注好学星城论坛了解详情。

想高效系统的学习Python编程语言,推荐大家关注一个微信公众号:Python编程学习圈。每天分享行业资讯、技术干货供大家阅读,关注即可免费领取整套Python入门到进阶的学习资料以及教程,感兴趣的小伙伴赶紧行动起来吧。

attachments-2022-05-rLS4AIF8628ee5f3b7e12.jpg

  • 发表于 2024-07-29 10:48
  • 阅读 ( 59 )
  • 分类:Python开发

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
小柒
小柒

1470 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 1470 文章
  3. Pack 1135 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章