前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python 编程骚操作连载(一)- 字符串、列表、字典和集合的处理(Part C)

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

作者头像
RiemannHypothesis
发布2022-09-26 16:45:04
8250
发布2022-09-26 16:45:04
举报
文章被收录于专栏:Elixir

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第16天,点击查看活动详情

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

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

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

代码语言:javascript
复制
nums = [1, -1, 10, 2, 5, -9, -8, 7]
_nums = list(filter(lambda x: x >= 0, nums))


if __name__ == '__main__':
    print(_nums)

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

image.png
image.png

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

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

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

代码语言:javascript
复制
var = [out_exp for out_exp in input_list if out_exp == 2]

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

代码语言:javascript
复制
nums = [1, -1, 10, 2, 5, -9, -8, 7]
_nums = [num for num in nums if num > 0]


if __name__ == '__main__':

    print(_nums)

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

image.png
image.png

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

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

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

代码语言:javascript
复制
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)

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

image.png
image.png

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

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

代码语言:javascript
复制
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)

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

image.png
image.png

三、统计相关

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

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

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

代码语言:javascript
复制
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)
image.png
image.png

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

使用 Counter 对象进行排序

代码语言:javascript
复制
# 排序方案二
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))
image.png
image.png

统计单词次数

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

代码语言:javascript
复制
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)

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

image.png
image.png

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-06-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 二、列表、字典和集合的处理
  • 三、统计相关
    • 统计单词次数
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档