#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2021/3/13 23:13
# @Author : banzhu
# @File : comprehensions.py
"""
推导式comprehensions(又称解析式),是Python的一种独有特性
使用推导式可以快速生成列表、元组、字典以及集合类型的数据
推导式分为:列表推导式,元组推导式,字典推导式和集合推导式
"""
"""
列表(list)推导式语法格式:
[表达式 for 迭代变量 in 可迭代对象[if 条件表达式]]
if条件表达式非必须的,可使用,也可省略
可以理解为:对 for 循环语句的格式做了一下简单的变形,并用 [] 括起来,将得到的一系列值组成一个列表
"""
a_range = range(10)
# 对a_range执行for表达式
a_list = [x * x for x in a_range]
# a_list集合包含10个元素
print(a_list)
b_list = [x * x for x in a_range if x % 2 == 0]
# a_list集合包含5个元素
print(b_list)
"""
元组(tuple)推导式语法格式:
(表达式 for 迭代变量 in 可迭代对象[if 条件表达式])
"""
a = (x for x in range(1,10))
print(a)
"""
字典(dict)推导式语法格式:
{表达式 for 迭代变量 in 可迭代对象[if 条件表达式]}
"""
# 使用 if 表达式筛选符合条件的键值对
olddict={'C语言中文网': 6, 'c.biancheng.net': 15}
newdict = {v: k for k, v in olddict.items() if v>10}
print(newdict)
"""
集合(set)推导式语法格式:
{表达式 for 迭代变量 in 可迭代对象[if 条件表达式]}
集合推导式和字典推导式的格式完全相同,通过表达式进行判断:
如果表达式以键值对(key:value)的形式,则证明此推导式是字典推导式;反之,则是集合推导式。
"""
setnew = {i**2 for i in range(3)}
print(setnew)
tupledemo = (1,1,2,3,4,5,6,6)
setnew = {x**2 for x in tupledemo if x%2==0}
print(setnew)