形如 lst = [x * x for x in range(1, 7)] 称为列表推导式
除了迭代取出元素和设定计算方法形成列表,列表推导式还能够设置条件,满足条件的元素才能够经过计算添加到列表。
示例代码:
lst = [x * x for x in range(1, 7) if x % 2 == 0] # 列表推导式:循环获取范围1~6的整数,符合条件时,计算乘积后添加到新列表。
print(lst) # 显示输出结果为:[4, 16, 36]
在列表推导式中有多个循环式,出现的是嵌套循环的效果,而非同步循环。
number = [1, 2, 3, 4, 5, 6] # 整数列表
square = [1, 4, 9, 16, 25, 36] # 平方列表
lst = ['{0}²={1}'.format(str(x), str(y)) for x in number for y in square if x <= 3]
print(lst)
Python 字符串format()格式化函数:
format 函数可以接受不限个参数,位置可以不按顺序。
基本语法:
>>>"{} {}".format("hello", "world") # 不设置指定位置,按默认顺序
'hello world'
>>> "{0} {1}".format("hello", "world") # 设置指定位置
'hello world'
>>> "{1} {0} {1}".format("hello", "world") # 设置指定位置
'world hello world'
print("姓名:{name}, 年龄:{age}".format(name='Lo',age='21'))
姓名:Lo, 年龄:21
还可以传入对象、格式化数字等,详情参考:https://www.runoob.com/python/att-string-format.html
输出结果:
['1²=1', '1²=4', '1²=9', '1²=16', '1²=25', '1²=36', '2²=1', '2²=4', '2²=9', '2²=16', '2²=25', '2²=36', '3²=1', '3²=4', '3²=9', '3²=16', '3²=25', '3²=36']
number = [1, 2, 3, 4, 5, 6] # 整数列表
square = [1, 4, 9, 16, 25, 36] # 平方列表
lst = ['{0}²={1}'.format(str(x), str(y)) for x in number for y in square if x <= 3 and x * x == y]
print(lst) # 显示输出结果为:['1²=1', '2²=4', '3²=9']
等价于以下代码:
number = [1, 2, 3, 4, 5, 6]
square = [1, 4, 9, 16, 25, 36]
lst = [] # 此部分用列表推导式替代
for x in number: # 此部分用列表推导式替代
for y in square: # 此部分用列表推导式替代
if x <= 3 and x * x == y: # 此部分用列表推导式替代
lst.append('{0}²={1}'.format(str(x), str(y))) # 此部分用列表推导式替代
print(lst)
lambda表达式的官方定义:一个匿名内联函数,由一个表达式组成,在函数被调用时求值。
创建lambda函数的语法: lambda [参数] : 表达式
lambda表达式可用于函数的参数。
示例代码(实现序列中偶数判断):
def iseven(n): # 定义验证数字是否偶数的函数
if n % 2 == 0: # 判断参数是否为偶数
return True # 符合条件返回真值
else:
return False #否则返回假值
lst = list(filter(iseven, number)) # 通过函数iseven对每个number的元素进行验证,验证为真的保留,并将最终结果转换为list。
print(lst) # 显示输出结果为:[2, 4, 6]
等价代码:
number = [1, 2, 3, 4, 5, 6] # 整数列表
lst = list(filter(lambda x: x % 2 == 0, number)) # 通过lambda表达式对每个number的元素进行验证,并将所有验证结果转换为list。
print(lst) # 显示输出结果为:[2, 4, 6]
上方代码中,每一个number的元素都会作为lambda表达式的参数(冒号前面的x)进行验证,如果符合条件(冒号后方的表达式),则会保留元素。
Python3 filter()函数用于过滤序列,过滤掉不符合条件的元素,返回一个迭代器对象,如果要转换为列表,可以使用 list()。 来转换。filter()函数接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。
基本语法:filter(function, iterable),
function为判断函数,iterable 为可迭代对象。
def is_odd(n):
return n % 2 == 1
tmplist = filter(is_odd, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
newlist = list(tmplist)
print(newlist)
示例代码:
name_set = {'邢佳栋', '李学庆', '高昊', '潘粤明', '戴军', '薛之谦', '贾宏声', '于波', '李连杰', '王斑', '蓝雨', '刘恩佑', '任泉', '李光洁', '姜文', '黑龙', '张殿菲', '邓超', '张杰', '杨坤', '沙溢', '李茂', '黄磊', '于小伟', '刘冠翔', '秦俊杰', '张琳', '陈坤', '黄觉', '邵峰', '陈旭', '马天宇', '杨子', '邓安奇', '赵鸿飞', '马可', '黄海波', '黄志忠', '李晨', '后弦', '王挺', '何炅', '朱亚文', '胡军', '许亚军', '张涵予', '贾乃亮', '陆虎', '印小天', '于和伟', '田亮', '夏雨', '李亚鹏', '胡兵', '王睿', '保剑锋', '于震', '苏醒', '胡夏', '张丰毅', '刘翔', '李玉刚', '林依轮', '袁弘', '朱雨辰', '丁志诚', '黄征', '张子健', '许嵩'}
print(list(filter(lambda x: x[0] == '李', [x for x in name_set])))
上述代码意为选出序列中姓李的人并形成新序列,因为不是编码问题的编码问题浪费了很多时间,希望后来人如果有看到的注意,避开我们踩过的坑,同行才能走得更远,也更快!