关于人工智能:4个Python推导式相关的开发技巧

2次阅读

共计 2859 个字符,预计需要花费 8 分钟才能阅读完成。

对于数据迷信,Python 通常被宽泛地用于进行数据的解决和转换,它提供了弱小的数据结构解决的函数,使数据处理更加灵便,这里说的“灵活性”是什么意思?

这意味着在 Python 中总是有多种办法来实现雷同的后果,咱们总是有不同的办法并且须要从中抉择易于应用、省时并能更好管制的办法。

要把握所有的这些办法是不可能的。所以这里列出了在解决任何类型的数据时应该晓得的 4 个 Python 技巧。

列表推导式 List Comprehension 是创立列表的一种优雅且最合乎 python 语言的办法。与 for 循环和 if 语句相比,列表推导式在基于现有列表的值创立新列表时语法要短得多。因而,让咱们看看该个性如何取得列表的正本。

应用列表推导式复制一个列表

有时须要创立现有列表的正本。最简略的答案是.copy(),它容许您将一个列表的内容复制到另一个 (新) 列表。

例如,一个由整数组成的列表 original_list。

 original_list = [10,11,20,22,30,34]

能够简略地应用.copy()办法复制此列表。

 duplicated_list = original_list.copy()

列表推导式能够失去完全相同的输入。复制列表是了解列表推导式的最佳案例。

看看上面这段代码。

 duplicated_list = [item for item in original_list]

这里并不是说复制列表应用列表推导式更好,而是说对于介绍列表推导式的工作形式,这个案例是最好的。

接下来,让咱们看看对列表的每个元素执行数学运算时,列表推导式如何使工作变得简略。

列表中的元素相乘

最简略或间接的乘法办法是应用乘法运算符,即 *

例如,想用一个标量 (即数字 5) 乘以列表中的每一项。这里必定不能应用 original_list*5,因为它将创立列表的 5 个正本。

在这个场景中,最好的答案是列表推导式,如下所示。

 original_list = [10,11,20,22,30,34]
 multiplied_list = [item*5 for item in original_list]
 
 # Output
 [50, 55, 100, 110, 150, 170]

这里的操作并不局限乘以一个数字。能够对原始列表的每个元素执行简单的操作。

例如,假如想计算每一项的平方根的立方,能够在一行中解决它。

 multiplied_list = [math.sqrt(item)**3 for item in original_list]
 
 # Output
 [31.6227766016838,
  36.4828726939094,
  89.4427190999916,
  103.18914671611546,
  164.31676725154983,
  198.25236442474025]

用于计算数字平方根的函数 sqrt 属于库 math,因而在本例中须要在应用它之前导入它。

与下面所示的内置函数相似,还能够在列表的每个元素上应用用户定义的函数。

例如如下所示的简略函数。

 def simple_function(item):
     item1 = item*10
     item2 = item*11
     return math.sqrt(item1**2 + item2**2)

能够对列表的每一项利用这个用户定义的函数。

 multiplied_list = [simple_function(item) for item in original_list]
 
 # Output
 [148.66068747318505,
  163.52675622050356,
  297.3213749463701,
  327.0535124410071,
  445.9820624195552,
  505.4463374088292]

列表推导式在理论场景中甚至更有用。通常在剖析工作中须要从列表中删除某种类型的元素,例如消 0 护着 nan 元素。列表推导式是实现这些工作的完满工具。

删除列表中的元素

依据特定条件筛选数据是抉择所需数据集的常见工作之一,同样的逻辑也用于列表推导式中。

假如你有上面提到的数字列表。

 original_list = [10, 22, -43, 0, 34, -11, -12, -0.1, 1]

你想要从这个列表中只保留正值。因而,从逻辑上讲,您心愿只保留那些对条件项 > 0 求值为 TRUE 的项。

 new_list = [item for item in original_list if item > 0]
 
 # Output
 [10, 22, 34, 1]

if 子句用来删除负值。能够应用 if 子句利用任何条件来从列表中删除任何项。

例如,当想删除所有平方小于 200 的项时须要做的就是在列表综合中提到条件项 **2 > 200,如下所示。

 new_list = [item for item in original_list if item**2 > 200]
 
 # Output
 [22, -43, 34]

在解决实在的数据集时,过滤列表项的条件可能要简单得多,这种办法既快又易于了解。

应用 dict()将两个列表转换为字典键值对

有时须要从两个列表中的值创立字典。你能够应用字典推导式(dictionarycomprehension),而不是一个一个地输出,这是创立字典的一种优雅而简洁的办法!

它的工作原理与列表推导式齐全类似,惟一的区别是——创立一个列表推导式时,你将所有内容都蕴含在方括号中,例如[],而在字典推导式中,你将所有内容都蕴含在花括号中,例如{}。

假如有两个列表—字段和详细信息—如下所示。

 fields = [‘name’,‘country’,‘age’,‘gender’]
 details = [‘pablo’,‘Mexico’, 30,‘Male’]

一个简略的办法是应用像这样的字典推导式 -

 new_dict = {key: value for key, value in zip(fields, details)}
 
 # Output
 {'name': 'pablo', 'country': 'Mexico', 'age': 30, 'gender': 'Male'}

这里须要了解的重要是函数 zip 是如何工作的。

在 Python 中,zip 函数承受可迭代对象,如字符串、列表或字典作为输出,返回它们聚合为元组。

因而,在本例中 zip 曾经从列表 fields 和 details 中造成了每个项的对。当字典推导式中应用 key: value 时,只需将此元组解包为独自的键 - 值对。

当应用 Python 中内置的 dict()构造函数 (用于创立字典) 时,这个过程甚至会变得更快,因为 dict()比字典推导式至多快 1.3 倍!

所以咱们须要将此构造函数与 zip()函数一起应用,它的语法要简略得多——dict(zip(fields,details))

总结

正如我一开始提到的,Python 非常灵活,因为有多种办法能够实现雷同的后果。依据工作的复杂程度须要抉择最好的办法来实现它。

我心愿这篇文章能对你有用。如果有任何其余办法能够做到我在本文中提到的同样的事件,请通知我。

https://avoid.overfit.cn/post/7198f28db4104e13819d38da4f3bd99b

作者:Suraj Gurav

正文完
 0