五个Python中你绝对想不到的一行代码技巧

牛咖网 239 0

引言

日常工作生活中,我超级喜欢使用Python,因为它的语法很简单,使用起来很方便。我总是痴迷于使用一行代码来解决复杂的问题。

当然,Python中的大多数一行代码都是用map()函数和生成式comprehensions 来实现的。这两个技巧有助于我们使用一行代码来处理各种工作.

闲话少说,我们直接开始吧...  :)

02

将列表中所有元素进行类型转换值

这一条在我们对列表中所有成员元素进行类型转换时非常有用.

样例1:


list(map(int, ['1', '2', '3']))

输出:


[1, 2, 3]

样例2:

当我们想要使一个由不同类型的元素组成的列表转化为同一类型时,这一条也很有用。


list(map(float, ['1', 2, '3.0', 4.0, '5', 6]))

输出:


[1.0, 2.0, 3.0, 4.0, 5.0, 6.0]

03

将整形数字所有位数求和

当我们在计算每一个整数的每个数字之和时,在C++中,我们往往使用除法和求余操作,然后再对每一位进行累加.

当然在Python中我们可以换种实现实现方式,如果我们将数字转化为字符串,那么这个问题就会变得相当简单.

我们知道字符串是可以迭代的,也就是说我们可以使用map()函数来迭代字符串中的每一个字符. 

代码逻辑如下:



sum_of_digits = lambda x: sum(map(int, str(x)))print(sum_of_digits(1789))

输出:


25

04

将包含子列表的列表展开

假设我们有一个包含子列表的列表,如下:


l = [[1, 2, 3], [4, 5], [6], [7, 8], [9]]

我们希望将该列表进行展开,得到结果如下:


[1, 2, 3, 4, 5, 6, 7, 8, 9]

‍我们可以想到的简单的实现方式如下:





flattened_list = []  for sublist in l:    for item in sublist:      flattened_list.append(item)

但是我们可以使用列表生成式来完成一行代码实现上述功能, 代码如下:


flattened_list = [item for sublist in l for item in sublist]

举例如下:




l = [[1, 2, 3], [4, 5], [6], [7, 8], [9]]flattened_list = [item for sublist in l for item in sublist]print(flattened_list)

输出如下:


[1, 2, 3, 4, 5, 6, 7, 8, 9]

05

将二维矩阵进行转置操作


这是使用zip()函数的一个很好的例子.


transpose_A = [list(i) for i in zip(*A)]

举例:



A = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]transpose_A = [list(i) for i in zip(*A)]

为了方便的打印转置后矩阵的结果,我们可以直接使用numpy库进行打印操作,代码如下:






import numpy as npA = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]print(np.matrix(A))transpose_A = [list(i) for i in zip(*A)]print(np.matrix(transpose_A))

结果如下:








[[1 2 3][4 5 6][7 8 9]]
[[1 4 7][2 5 8][3 6 9]]

06

交换字典中的键-值


假设我们有一个职工数据存在dict()里,我们需要交换键值对.


staff = {'Data Scientist': 'John', 'Django Developer': 'Jane'}

我们在Python中可以使用dict()生成式来完成上述功能,代码如下:


staff = {i:j for j, i in staff.items()}

我们打印结果:


print(staff)

输出:


{'John': 'Data Scientist', 'Jane': 'Django Developer'}


07

总结

本文介绍了五个Python中使用一行代码完成日常工作中一些意想不到的功能,并给出了完整的代码实现。

您学废了吗?

  • 站长公众号
  • 汇财定投
  • weinxin

发表评论 (已有0条评论)

还木有评论哦,快来抢沙发吧~