它的结构是在一个中括号里包含一个表达式,然后是一个
for
语句,然后是 0 个或多个
for
或者
if
语句。那个表达式可以是任意的,意思是你可以在列表中放入任意类型的对象。返回结果将是一个新的列表,在这个以
if
和
for
语句为上下文的表达式运行完成之后产生。
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)
复制代码
执行上述代码,输出结果如下:
用
列表解析
的解决方式比
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)
复制代码
执行上述代码,输出结果如下:
集合解析
筛出集合中符合条件的元素
集合解析与列表解析类似,区别在于集合解析使用的是
{ }
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)
复制代码
执行上述代码,输出结果如下:
三、统计相关
如何统计序列中元素出现的频率并排序?
统计序列中元素出现的频率的结果肯定是一个字典,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)
复制代码