Python拥有如此强大的支持网络,似乎它可以一次解决很多问题。人们应该意识到这是正常的。但是初学者可能会对此感到困惑。一个人可以找到很多资源来解决基础知识问题,但是呢?要学习哪些资源以不断改进?在这里,作者列出了5个最有用的代码片段,进一步提高了作者的水平,让代码变得更好。下面介绍如何在您的代码中应用这5个代码片段。1.ListComprehensions以前可能有人听说过这些。Python中的一种编码模式非常普遍,需要对其进行修改。使用for循环创建列表是列表推导式有价值的地方。列表理解是可读和简洁的,确实需要一些时间来理解发生了什么。让我们深入研究一下,看看是否可以解决这个问题。创建列表时应考虑列表理解。列表理解以一组方括号开始。撇开语法不谈,为了显示两种语言有多么相似list_comp=[expressionforiteminitems]任务是替换一个将项目添加到列表的for循环。new_list=[]foriteminold_list:new_list.append(item**2)注意:调用new_list循环遍历旧列表中的项目使用add方法将项目**2添加到新列表非常简单.列表理解看起来像new_list=[item**2foriteminold_list]注意:将表达式item**2作为要添加到列表的表达式,它在列表理解中排在第一位。之后的for循环是迭代循环,将其括在方括号中并为其分配变量new_list意味着,对于循环的每个项目,将表达式item**2添加到new_list。不需要额外的方法,一行代码就可以了!您甚至可以添加条件语句以选择要添加的内容。此功能还扩展到集合和词典!您甚至可以使用嵌套的for循环编写列表推导式!请注意,过度使用是可能的!列表仅在列表循环很简单并且您明确要创建列表派生时使用。2.生成器表达式——节省内存使用当你有一个大数据集并且需要迭代它或从中获取结果但不能将所有数据存储在内存中时,你应该想到生成器函数。生成器函数非常像一个函数,除了它不是返回而是切换为yield关键字。生成器函数创建迭代器,迭代器需要强制转换它们持有的值。它们不将对象存储在列表或集合中。一次只输出一项。这称为延迟循环。因此,在读取大文件时使用生成器。defgen(n):whileTrue:yieldnn+=1G=gen(3)#startsat3print(next(G))#3print(next(G))#4print(next(G))#5print(next(G))#6注意:创建一个函数genYield关键字来存储值n,一直保存到调用next()方法使用赋值运算符给n加1这是一个死循环,一直调用next()方法,会一直继续下去outputthevalue现在,这些值不会被存储,只会在调用next()方法时弹出。生成器创建一个迭代器,然后依靠next()方法来输出值。当您拥有大型数据集并希望在不溢出内存的情况下流式传输数据时,这很有用。3.使用zip遍历两个对象通常你想遍历多个对象,这样你就可以从每个对象收集数据。Zip是允许这样做的功能!如果您需要迭代以完全理解文件名及其对应的链接,您可以这样做。forfile_name,linkinzip(names,links):print(file_name,link)这将接受两个对象并返回一个元组,每个元组中都有相应的项目。在循环中,将元组解压缩为单独的值file_name和link.zip()。您可以根据需要选择任意多的集合,但是当最短的集合用完时它将停止。Zip函数可用于通过本文中提到的列表推导式迭代同一对象中的元素对。例如:differences=[next_el-eltforel,next_elinzip(items,items[1:])4.Counter——生成对象的计数源:Pexelscounter是dictionary的子类,其中对象的元素是keys,而对象中的项目计数是值。它对计算对象的数量很有效。访问计数器需要导入内置的collections模块。假设您要计算列表中某个字符串的所有出现次数。importcollectionscounts=Counter([Fred,Samantha,Jean-Claude,Samantha])print(counts)Output:Counter({Samantha:2,Fred:1,Jean-Claude:1})计数器类的优点是它可以被更新,字典API可用于访问值。fromcollectionsimportCounterc=Counter(abcdaab)forletterinabcde:print(letter,:,c[letter])输出:a:3b:2c:1d:1e:0注意:使用字符串“abcdaab”将c分配给Counter子类。计数器类为每个字符提供单独的计数。c[item]可以像字典一样访问。循环遍历字符串“abcde”并为每个字符串分配一个字母的for循环。输入字符串字符,打印变量字母,可以像字典一样。每个字母的计数由c[letter]访问。5.Chainmultiplecollectionsources:如果Pexels需要一次迭代多个集合,itertools模块中的chain方法是实现这个目标的好方法。fornameinitertools.chain(first_name_list,second_name_list):create_person(name)这将在用尽之前遍历第一个集合,然后继续下一个集合,依此类推。希望你喜欢这篇文章。
