当前位置: 首页 > 后端技术 > Python

4Python推导相关开发技巧

时间:2023-03-26 00:48:54 Python

对于数据科学,Python通常被广泛用于数据处理和转换。它提供了强大的数据结构处理功能,使数据处理更加灵活,这里提到的“灵活性”是什么意思?这意味着在Python中总是有多种方法可以达到相同的结果,我们总是有不同的方法并且需要在它们中选择易于使用、节省时间并提供更多控制的方法。掌握所有这些方法是不可能的。因此,这里列出了在处理任何类型的数据时都应该了解的4个Python技巧。ListComprehensionListComprehension是一种创建列表的优雅且最pythonic的方式。与for循环和if语句相比,列表推导式基于现有列表的值创建新列表的语法要短得多。那么让我们看看这个属性如何获取列表的副本。使用列表理解复制列表有时需要创建现有列表的副本。最简单的答案是.copy(),它允许您将一个列表的内容复制到另一个(新)列表。例如,整数列表original_list。original_list=[10,11,20,22,30,34]可以使用.copy()方法简单地复制此列表。duplicated_list=original_list.copy()列表理解可以获得完全相同的输出。复制列表是理解列表理解的最佳案例。看看下面的代码。duplicated_list=[itemforiteminoriginal_list]这并不是说对重复列表使用列表推导更好,而是这种情况最适合介绍列表推导如何工作。接下来,让我们看看在对列表的每个元素执行数学运算时,列表推导式如何让生活变得轻松。列表的元素相乘最简单或直接的乘法方法是使用乘法运算符,即*例如,如果您想要将列表中的每个项目乘以标量(即数字5)。你绝对不能在这里使用original_list*5因为它会创建列表的5个副本。在这种情况下,最佳答案是列表理解,如下所示。original_list=[10,11,20,22,30,34]multiplied_list=[item*5foriteminoriginal_list]#Output[50,55,100,110,150,170]这里的运算不限于乘以一个数字。可以对原始列表的每个元素执行复杂的操作。例如,假设你想计算每一项的平方根的立方,你可以在一行中解决它。multiplied_list=[math.sqrt(item)**3foriteminoriginal_list]#Output[31.6227766016838,36.4828726939094,89.4427190999916,103.18914671611546,164.31676725154983,198.25236442474025]用于计算数字平方根的函数sqrt属于库math,因此在本例中需要在使用它之前导入它。与上面显示的内置函数类似,用户定义的函数也可以用于列表的每个元素。例如一个简单的函数,如下所示。defsimple_function(item):item1=item*10item2=item*11returnmath.sqrt(item1**2+item2**2)可以将这个用户定义的函数应用到列表的每一项。multiplied_list=[simple_function(item)foriteminoriginal_list]#Output[148.66068747318505,163.52675622050356,297.3213749463701,327.0535124410071,445.9820624195552,505.4463374088292]列表推导式在实际场景中甚至更有用。Ofteninanalysistasksitisnecessarytoremovecertaintypesof列表中的元素,例如消除0nan元素。列表理解是完成这些任务的完美工具。从列表中删除元素根据特定条件过滤数据是选择所需数据集的常见任务之一,列表理解中使用相同的逻辑。假设您有下面提到的数字列表。original_list=[10,22,-43,0,34,-11,-12,-0.1,1]你想只保留这个列表中的正值。因此,从逻辑上讲,您只想保留条件项>0时评估为TRUE的那些项。new_list=[itemforiteminoriginal_listifitem>0]#Output[10,22,34,1]if子句用于删除负值。可以使用if子句应用任何条件以从列表中删除任何项目。例如,当你想删除所有平方小于200的项目时,你只需要在列表合成中提到条件项目**2>200,如下所示。new_list=[itemforiteminoriginal_listifitem**2>200]#Output[22,-43,34]在处理真实数据集的时候,过滤列表项的条件可能要复杂很多,这种方法比较快而且容易明白。使用dict()将两个列表转换为键值对的字典有时需要根据两个列表中的值创建字典。您可以使用字典理解(dictionarycomprehension),而不是一个一个地输入它们,这是一种优雅简洁的创建字典的方式!它的工作方式与列表推导完全相同,唯一的区别是-创建列表使用推导,您将所有内容括在方括号中,例如[],而在字典推导中,您将所有内容括在花括号中,例如{}。假设有两个列表——字段和详细信息——如下所示。fields=['name','country','age','gender']details=['pablo','Mexico',30,'Male']一个简单的方法是使用像这样的字典理解-new_dict={key:valueforkey,valueinzip(fields,details)}#输出{'name':'pablo','country':'Mexico','age':30,'gender':'Male'}这里要理解的重要一点是函数zip是如何工作的。在Python中,zip函数接受可迭代对象(例如字符串、列表或字典)作为输入并将它们聚合为元组返回。所以在这个例子中,zip已经为列表字段和详细信息中的每个项目形成了对。在字典理解中使用键:值时,只需将此元组解包为单独的键值对。当在Python中使用内置的dict()构造函数(用于创建字典)时,这个过程甚至更快,因为dict()至少比字典理解快1.3倍!所以我们需要把这个构造函数和zip()函数结合起来,它的语法就简单多了——dict(zip(fields,details)).根据任务的复杂性,您需要选择实现它的最佳方法。我希望这篇文章对你有用。如果有任何其他方法可以做我在这篇文章中提到的同样的事情,请告诉我。https://avoid.overfit.cn/post/7198f28db4104e13819d38da4f3bd99b作者:SurajGurav