点击上方“中国统计网”收藏星星吧!
如果在刚开始学习的时候能掌握这些方法,写出来的代码会更加漂亮。在这篇文章中,作者介绍了5种方法。可能我们在入门阶段还不太了解,但这5种技巧在实战中非常实用。
以下是五条实用技巧:
字符串操作
字符串本质上是元组,但是它有很多“操作”,最直观的就是 + 和 * 操作,分别代表重复和连接。
>>> my_string = "Hi Medium..!"
>>> print(my_string * 2)
Hi Medium..!Hi Medium..!
>>> print(my_string + " I love Python" * 2)
Hi Medium..! I love Python I love Python
另外如果想获取反向字符串,也可以直接使用[::-1]来索引:
>>> print(my_string[::-1])
!..muideM iH>>> my_list = [1,2,3,4,5]
>>> print(my_list[::-1])
[5, 4, 3, 2, 1]
如果列表元素都是字符串,那么我们可以快速使用 join() 方法将所有元素连接在一起:
>>> word_list = ["awesome", "is", "this"]
>>> print(' '.join(word_list[::-1]) + '!')
this is awesome!
如上,我们使用 .join() 方法来连接列表元素,其中 " " 表示连接方式为空格。其实这种方法在自然语言处理中经常用到,比如我们将一个句子拆分成字符,那么处理完之后就需要使用 join() 来合并它们。
列表推导
如果你还不知道如何使用列表推导,那就现在就学习吧。正如本文作者所说,“当我第一次学习这种方法时,我的整个世界都改变了。”列表推导确实很强大。它不仅比一般方法更快,而且非常直观和易读。如果你想迭代列表以进行一些计算,现在就使用它。
让我们首先定义一个简单的函数,对一个变量求平方并加 5:
>>> def stupid_func(x):
>>> return x**2 + 5
如果我们想将此函数应用于列表中的奇数项,而不使用列表推导,我们通常会按如下方式编写:
>>> my_list = [1, 2, 3, 4, 5]
>>> new_list = []
>>> for x in my_list:
>>> if x % 2 != 0:
>>> new_list.append(stupid_func(x))
>>> print(new_list)
[6, 14, 30]
但是现在我们有了列表推导,因此上述代码可以等效地修改为:
>> my_list = [1, 2, 3, 4, 5]
>> print([stupid_func(x) for x in my_list if x % 2 != 0])
[6, 14, 30]
列表推导式的一般语法可以表示为[for item in list]。如果要添加一些布尔条件语句,可以将上述语法修改为[for item in list if]。其结构其实等同于以下内容。
>> for item in list:
>> if conditional:
>> expression
上面的列表推导可以进一步简化,而无需定义新函数。
>>> print([x ** 2 + 5 for x in my_list if x % 2 != 0])
[6, 14, 30]
和地图
是一个匿名函数,可能看起来有点奇怪,但一旦你理解了它,它就会变得非常直观和强大。
一般来说,函数比较小,不需要定义函数名。那么为什么需要匿名函数呢?简单来说,它们最常用于执行一些直观的操作,不需要标准函数定义,也不需要再次调用新的函数名。
我们以平方然后加 5 为例。之前我们定义了一个标准函数 def (x)。现在我们可以尝试一个匿名函数:
>>> stupid_func = (lambda x : x ** 2 + 5)
>>> print([stupid_func(1), stupid_func(3), stupid_func(5)])
[6, 14, 30]
那么我们为什么要使用上面的表达式呢?很大一部分原因是当我们想要执行一些简单的操作时,我们可以在不定义真正的函数的情况下做到这一点。例如,要对列表的元素进行排序,一种直观的方法是使用 () 方法:
>>> my_list = [2, 1, 0, -1, -2]
>>> print(sorted(my_list))
[-2, -1, 0, 1, 2]
这个默认只能按照从大到小或者从小到大排序,但是借助表达式,我们可以实现更灵活的排序标准。如下所示,我们想按照最小平方数对列表进行排序。可以用一个函数来定义key,告诉()方法如何排序。
>>> print(sorted(my_list, key = lambda x : x ** 2))
[0, -1, 1, -2, 2]
Map 是一个简单的函数,它将函数应用于其他元素序列,例如列表。如果我们有两个列表,并且想要将这两个列表的相应元素相乘,我们可以使用函数和 map 快速实现此功能:
>>> print(list(map(lambda x, y : x * y, [1, 2, 3], [4, 5, 6])))
[4, 10, 18]
上面的代码非常优雅,如果不使用它们,一般表达式需要这样写:
>> x, y = [1, 2, 3], [4, 5, 6]
>> z = []
>> for i in range(len(x)):
>> z.append(x[i] * y[i])
>> print(z)
[4, 10, 18]
单行条件语句
如果我们使用条件语句,它很可能看起来像这样:
>>> x = int(input())
>>> if x >= 10:
>>> print("Horse")
>>> elif 1 < x < 10:
>>> print("Duck")
>>> else:
>>> print("Baguette")
但实际上我们也可以把所有的条件都写在打印函数中,也就是说上面7行代码可以等价于下面这行:
print("Horse" if x >= 10 else "Duck" if 1 < x < 10 else "Baguette")
这个看起来真的很简洁。如果你看一下你之前写的代码,你会发现很多都可以改成这个表达式。
拉链()
前面介绍map()函数的时候,我们给出了将函数应用于两个并行列表的例子,但是zip()函数可以更简单地做到这一点。
如果我们有两个列表,第一个列表包含名字,第二个列表包含姓氏。使用 zip() 函数,我们可以将它们连接在一起,如下所示。
>>> first_names = ["Peter", "Christian", "Klaus"]
>>> last_names = ["Jensen", "Smith", "Nistrup"]
>>> print([' '.join(x) for x in zip(first_names, last_names)])
['Peter Jensen', 'Christian Smith', 'Klaus Nistrup']
即zip将两个等长列表变成对,即
(("Peter", "Jensen"), ("Christian", "Smith"), ("Klaus", "Nistrup"))。
结尾。
选自
扫一扫在手机端查看
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。