# 列表推导式 - 快速创建列表的表达式
# 1.推导式结构1
"""
[表达式 for 变量 in 序列] - 让变量去序列中取值,一个一个的取,取完为止,每取一个值就将表达式的值作为列表的一个元素
"""
list1 = [10 for x in 'abc']
print(list1) # [10, 10, 10]
list2 = [x*2 for x in range(5, 11)]
print(list2) # [10, 12, 14, 16, 18, 20]
# 练习1: 使用列表推导式获取nums中所有元素的个位数
# [3, 9, 0, 6, 1, 2]
nums = [23, 89, 90, 56, 41, 802]
result = [x % 10 for x in nums]
print(result)
# 练习2:是用列表推导式将nums中所有的元素乘以10
# [230, 890, 900, 560, 410, 8020]
nums = [23, 89, 90, 56, 41, 802]
result = [x * 10 for x in nums]
print(result)
# 练习3:已知分数列表,将列表中的元素全部换成'及格' - True 或者'不及格'-False
# [True, True, False, True, False, True]
scores = [90, 78, 45, 67, 39, 89]
result = [x >= 60 for x in scores]
print(result)
# ['及格', '及格', '不及格', '及格', '不及格', '及格']
result = ['及格' if x >= 60 else '不及格' for x in scores]
print(result)
# 练习4:已知一个数字列表,将列表中所有的偶数除以2,所有的奇数乘以2
# [46, 178, 45, 28, 82, 401]
nums = [23, 89, 90, 56, 41, 802]
result = [x*2 if x % 2 else x/2 for x in nums]
print(result)
# 2.推导式结构2
"""
[表达式 for 变量 in 序列 if 条件语句]
创建一个列表;
变量去序列取值,一个一个的取,取完为止,每取一个值就判断条件语句是否为True,如果为True就计算表达式的结果为列表的元素
"""
result = [x for x in range(10, 21) if x % 2]
print(result) # [11, 13, 15, 17, 19]
# 练习1:使用列表推导式提取nums中所有的奇数
# [23, 89, 41]
nums = [23, 89, 90, 56, 41, 802]
result = [x for x in nums if x % 2]
print(result)
# 练习2:已知一个列表,提取列表中所有的字符串
# ['hello', '12']
list1 = [10, 23.9, 'hello', True, '12', 0]
result = [x for x in list1 if type(x) == str]
print(result)
# 练习3:已知一个列表,提取列表中所有的整数,并且将整数加3
# [13, 3, 5]
list1 = [10, 23.9, 'hello', True, '12', 0, 2]
result = [x+3 for x in list1 if type(x) == int]
print(result)
7.补充三目运算符
# C和Java
"""
表达式?值1:值2 - 如果表达式的值为真结果就是值1,否则结果是值2
"""
# python
"""
值1 if 表达式 else 值2 - 如果表达式的值为True结果就是值1,否则结果是值2
"""
age = 8
result = '成年' if age >= 18 else '未成年'
print(result)
a = 1
b = 2
result = b * 2 if a > 0 else b / 2
print(result)