Python 编程骚操作连载(一)- 字符串、列表、字典和集合的处理(Part C)

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: Python 编程骚操作连载(一)- 字符串、列表、字典和集合的处理(Part C)

二、列表、字典和集合的处理

filter 函数筛选列表中符合条件的数据

filter 过滤列表中的元素,并且返回一个由所有符合要求的元素所构成的列表,而表达式可以使用 lambda 表达式一行搞定

nums = [1, -1, 10, 2, 5, -9, -8, 7]
_nums = list(filter(lambda x: x >= 0, nums))
if __name__ == '__main__':
    print(_nums)
复制代码

执行上述代码,输出结果如下:

d841d3ceba9b496a90694e0d4cbac4a1_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

列表解析 筛选出列表中符合条件的数据

列表解析(又称列表推导式)提供了一种简明扼要的方法来创建列表。

它的结构是在一个中括号里包含一个表达式,然后是一个 for 语句,然后是 0 个或多个 for 或者 if 语句。那个表达式可以是任意的,意思是你可以在列表中放入任意类型的对象。返回结果将是一个新的列表,在这个以 iffor 语句为上下文的表达式运行完成之后产生。

var = [out_exp for out_exp in input_list if out_exp == 2]
复制代码

使用列表解析筛选数据可以将 if 条件替换为指定的条件,如 item > 0 即可获取目标列表。

nums = [1, -1, 10, 2, 5, -9, -8, 7]
_nums = [num for num in nums if num > 0]
if __name__ == '__main__':
    print(_nums)
复制代码

执行上述代码,输出结果如下:

c899210a18da40868a55e4b683ff326d_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

列表解析的解决方式比 filter() 函数的解决方式要高效,但是这两种方式都远快于通过 for 循环的解决方式

字典解析 筛出字典中符合条件的元素

字典解析与列表解析类似,只不过字典解析要循环 k 和 v,并且使用 { } 来包裹

dict_data = {
    "peter": 80,
    "stark": 99,
    "thor": 60,
    "banner": 98,
    "clint": 80
}
# 筛选出 value 大于 90 的键值对
_dict_data = {k : v for k, v in dict_data.items() if v > 90}
print(_dict_data)
复制代码

执行上述代码,输出结果如下:

a03d62908508433c87e2e2823bf8c188_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

集合解析 筛出集合中符合条件的元素

集合解析与列表解析类似,区别在于集合解析使用的是 { }

d = [1, 2, 2, 3, -3, 9, 0, 11, 20, 33]
set_data = set(d)
# 删除除以 2 余数为 0 的元素
_set_data = {x for x in set_data if x % 2 == 0}
print(_set_data)
复制代码

执行上述代码,输出结果如下:

33a1964c19d54a9aa38af2bbe628ba3e_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

三、统计相关

如何统计序列中元素出现的频率并排序?

统计序列中元素出现的频率的结果肯定是一个字典,Key 为序列中的元素而 Value 为元素出现的次数,因此可以先创建一个字典,作为初始的统计结果,并假设初始出现的次数都为 0。

对频率结果字典的 Value 进行排序

from random import randint
# 生成包含重复元素的随机序列
nums = [randint(0, 10) for num in range(20)]
# 元素出现次数的统计最终肯定是一个字典,因此可以以元素的Key,出现的次数为Value
count = dict.fromkeys(nums, 0)
# 统计频次
for num in nums:
    count[num] += 1
# 排序方案一
# 根据Value进行排序
_count = sorted(count.values())
# 获取最大的次数
max = _count.pop()
keys = []
# 根据Value获取Key
for k, v in count.items():
    if v == max:
        keys.append(k)
if __name__ == '__main__':
    print(nums)
    print(count)
    print(_count)
    print(max)
    print(keys)
复制代码

df408a14cac74dd79dc355d6a017ffa0_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

出现的最大频次为4,且频次为4的元素是9和1

使用 Counter 对象进行排序

# 排序方案二
from collections import Counter
_count = Counter(count)
# 中间代码不变
if __name__ == '__main__':
    print(nums)
    print(count)
    print(_count)
    print(_count.most_common())
    # 获取出现频次最高的三个元素
    print(_count.most_common(3))
复制代码

fa65fa53dbea4df7b21474999aa873c2_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

统计单词次数

要统计一段文本中出现频次最高的单词也可以使用到 Counter 对象,这里以 Python 之禅 这段文本为例,统计出现次数最多的前三个单词。

import re
from collections import Counter
zen = open('zen.txt').read()
# 分割所有单词
zen = re.split('\W+', zen)
# print(zen)
_zen = Counter(zen)
print(_zen)
_zen_3 = _zen.most_common(3)
print('前三个出现频次最高的词:', _zen_3)
复制代码

执行上述代码,输出结果如下:

6ddf4b114bed42aaa767deef2999a3f2_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

调用 Counter 对象的 most_common 方法并输出指定的参数如频次最高的前三个词,输入参数 3 即可获取。

相关文章
|
1月前
|
Unix Linux 程序员
[oeasy]python053_学编程为什么从hello_world_开始
视频介绍了“Hello World”程序的由来及其在编程中的重要性。从贝尔实验室诞生的Unix系统和C语言说起,讲述了“Hello World”作为经典示例的起源和流传过程。文章还探讨了C语言对其他编程语言的影响,以及它在系统编程中的地位。最后总结了“Hello World”、print、小括号和双引号等编程概念的来源。
116 80
|
23天前
|
Python
[oeasy]python055_python编程_容易出现的问题_函数名的重新赋值_print_int
本文介绍了Python编程中容易出现的问题,特别是函数名、类名和模块名的重新赋值。通过具体示例展示了将内建函数(如`print`、`int`、`max`)或模块名(如`os`)重新赋值为其他类型后,会导致原有功能失效。例如,将`print`赋值为整数后,无法再用其输出内容;将`int`赋值为整数后,无法再进行类型转换。重新赋值后,这些名称失去了原有的功能,可能导致程序错误。总结指出,已有的函数名、类名和模块名不适合覆盖赋新值,否则会失去原有功能。如果需要使用类似的变量名,建议采用其他命名方式以避免冲突。
40 14
|
18天前
|
JSON 监控 安全
深入理解 Python 的 eval() 函数与空全局字典 {}
`eval()` 函数在 Python 中能将字符串解析为代码并执行,但伴随安全风险,尤其在处理不受信任的输入时。传递空全局字典 {} 可限制其访问内置对象,但仍存隐患。建议通过限制函数和变量、使用沙箱环境、避免复杂表达式、验证输入等提高安全性。更推荐使用 `ast.literal_eval()`、自定义解析器或 JSON 解析等替代方案,以确保代码安全性和可靠性。
28 2
|
29天前
|
索引 Python
Python列表
Python列表。
48 8
|
1月前
|
C语言 Python
[oeasy]python054_python有哪些关键字_keyword_list_列表_reserved_words
本文介绍了Python的关键字列表及其使用规则。通过回顾`hello world`示例,解释了Python中的标识符命名规则,并探讨了关键字如`if`、`for`、`in`等不能作为变量名的原因。最后,通过`import keyword`和`print(keyword.kwlist)`展示了Python的所有关键字,并总结了关键字不能用作标识符的规则。
35 9
|
1月前
|
数据挖掘 大数据 数据处理
python--列表list切分(超详细)
通过这些思维导图和分析说明表,您可以更直观地理解Python列表切分的概念、用法和实际应用。希望本文能帮助您更高效地使用Python进行数据处理和分析。
65 14
|
1月前
|
分布式计算 大数据 数据处理
技术评测:MaxCompute MaxFrame——阿里云自研分布式计算框架的Python编程接口
随着大数据和人工智能技术的发展,数据处理的需求日益增长。阿里云推出的MaxCompute MaxFrame(简称“MaxFrame”)是一个专为Python开发者设计的分布式计算框架,它不仅支持Python编程接口,还能直接利用MaxCompute的云原生大数据计算资源和服务。本文将通过一系列最佳实践测评,探讨MaxFrame在分布式Pandas处理以及大语言模型数据处理场景中的表现,并分析其在实际工作中的应用潜力。
83 2
|
3月前
|
安全 测试技术 数据库
Python编程--sys模块及OS模块简单用例
Python编程--sys模块及OS模块简单用例
43 1
|
3月前
|
JSON 数据格式 Python
Python编程:利用JSON模块编程验证用户
Python编程:利用JSON模块编程验证用户
34 1
|
3月前
|
数据处理 Python
Python编程-利用datetime模块生成当前年份之前指定的间隔所有年份的日期列表和csv文件
Python编程-利用datetime模块生成当前年份之前指定的间隔所有年份的日期列表和csv文件
28 1