效率翻倍:python列表推导式及lambda函数的使用 您所在的位置:网站首页 python定义空列表并赋值 效率翻倍:python列表推导式及lambda函数的使用

效率翻倍:python列表推导式及lambda函数的使用

2023-05-24 05:58| 来源: 网络整理| 查看: 265

列表推导式

列表推导式是一种在Python中快速创建列表的方法。它允许我们使用简洁的方式通过对一个可迭代对象的元素进行操作,生成一个新的列表。 如:我们遍历一个包含int、float和str三种类型的列表,分别分类提取出来形成三个数组 原始情况下我们的写法为

lst = [1, 2.2, 'fighting', 6, 3.14, 'test'] # 创建三个空数组,用于存储数据 int_array = [] float_array = [] str_array = [] # 遍历列表,并将不同类型的数据分别添加到不同的数组中 for item in lst: if isinstance(item, int): int_array.append(item) elif isinstance(item, float): float_array.append(item) elif isinstance(item, str): str_array.append(item)

如果使用列表推导式的话我们可以变成这样,是不是看起来舒服很多

int_array = [item for item in my_list if isinstance(item, int)] float_array = [item for item in my_list if isinstance(item, float)] str_array = [item for item in my_list if isinstance(item, str)]

如上所示,列表推导式的格式通常如下

new_list = [expression for item in iterable if condition] #expression:表示一个表达式 #item:从可迭代对象中获取的每个元素 #iterable:个可迭代对象,例如列表、元组、字典、集合等 #if condition:可选的条件语句,用于过滤掉不满足条件的元素 #举例 list = [1, 2, 3, 4, 5] squared_list = [x**2 for x in lst] #最终squared_list=[1,4,9,16,25] lambda表达式

lambda表达式是一种用于创建匿名函数的语法结构,它可以在需要函数对象的任何位置定义函数,而不必使用def语句来定义一个函数并将其绑定到一个名称上。lambda表达式通常用于函数式编程中的高阶函数,如map()、filter()等。 一上面的求平方举例,我们原始的方法为:

lst = [1, 2, 3, 4, 5] squared_list = [] for num in lst: result.append(num ** 2) print(squared_list) # 输出 [1, 4, 9, 16, 25]

lambda表达式为:

lst = [1, 2, 3, 4, 5] squared_list = list(map(lambda x: x**2, lst)) print(result) # 输出 [1, 4, 9, 16, 25] #lambda表达式格式:lambda arguments: expression #arguments:函数的参数列表 #expression:函数的返回值,可以是函数表达式 #map() 是 Python 内置的函数,它可以将一个函数作用于一个可迭代对象(如列表、元组、集合等)中的每个元素,将其映射成一个新的可迭代对象 #map(function, iterable, ...) #function :函数体 #iterable:可迭代对象

实际场景运用,以UI自动化selenium操作举例,一般情况下在对一个元素需要多次点击是这样用的

from selenium.webdriver.common.by import By from selenium import webdriver import time driver = webdriver.Chrome() driver.get(#url) element_name = "Kuromi" while True: try: kuromi = driver.find_element(By.NAME, element_name) kuromi.click() break except NoSuchElementException: print(f"元素 {element_name} 未找到,等待3秒后重试") time.sleep(3)

以上场景的代码可以修改为:

from selenium.webdriver.common.by import By from selenium import webdriver import time driver = webdriver.Chrome() driver.get(#url) element_name = "Kuromi" while True: try: kuromi = driver.find_element(lambda driver: driver.find_element(By.NAME, element_name)) #在循环中每次尝试找到该元素时,都重新执行driver.find_element(By.NAME, element_name)语句 kuromi.click() break except NoSuchElementException: print(f"元素 {element_name} 未找到,等待3秒后重试") time.sleep(3)

虽然使用 lambda 表达式在这个例子中可能并不会比直接使用 By.NAME 更简单。但是在特定的场景中(如多次调用),使用 lambda 表达式可以根据不同的需求动态地选择定位元素的方法,而不是在代码中写死一个固定的方法。例如,可以在不同的元素属性中选择定位方法。

但是在一些简单的场景中,直接使用 By 的方法会更简单和易读



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有