一行代码搞定的事情,为啥要两行!
在用Python的第一天,便对它的简单性、流行性及其著名的单行代码着迷。
下面分享25个有趣且实用的Python单行代码,欢迎大家点赞、收藏,支持!
1. 交换两个变量
a = 4
b = 5 a,b = b,a ## 👍
print(a,b)
#结果:5 4
2. 多变量赋值
a,b,c = 4,5.5,'Hello' ## 👍
print(a,b,c) #结果: 4 5.5 hello
增加一点点难度:
a,b,*c = [1,2,3,4,5] ## 👍👍
print(a,b,c) #结果: 1 2 [3,4,5]
3. 列表偶数求和
a = [1,2,3,4,5,6] s = sum([num for num in a if num%2 == 0]) ## 👍👍👍
print(s) #结果: 12
4. 列表删除多元素
del
是 Python 中用于从列表中删除值的关键字。
a = [1,2,3,4,5] del a[1::2] ## 👍👍👍
print(a) #结果:[1, 3, 5]
此处需要理解L[start:end:step]
:
start
为开始位置,省略时为0
。end
为结束位置,省略时为列表长度;step
步长,省略时为1
,如果有负号-
表示按列表自右到左的方向迭代。
5. 读取文件
最常用的方式
with open("data.txt") as f: ## 👍👍
lst=[line.strip() for line in f] print(lst)
更简单、更短的方法
lst = list(open('data.txt')) ## 👍👍👍
print(lst)
也可以
lst = [line.strip() for line in open('data.txt')] ## 👍👍
print(lst)
6. 将数据写入文件
with open("data.txt",'a') as f:
f.write("Python is awsome")```
## 7. 创建列表
`range()`函数可以用于生成一系列整数:
```python
lst = [i for i in range(0,10)] ## 👍
print(lst) ```
单行列表推导,快速创建:
```python
lst = [("Hello "+i) for i in ['Karl','Abhay','Zen']] ## 👍👍👍
print(lst) ```
## 8. 映射列表
有时需要改变一个列表中所有元素的数据类型。比较直观的想法是使用**循环**:先访问列表中的所有元素,然后逐个更改元素的数据类型。这种方法中规中矩,但巧用 `map`一一映射,耳目一新。
```python
list(map(int,['1','2','3'])) ## 👍👍👍
list(map(float,[1,2,3])) ## 👍👍👍
[float(i) for i in [1,2,3]] ## 👍👍
9. 快速创建集合
我们可用创建列表的方法快速创建集合:
#### 范围内所有偶数的平方
s = {x**2 for x in range(10) if x%2==0} ## 👍👍👍
print(s) #结果:{0, 4, 16, 36, 64}
10. FizzBuzz单行代码
有这样一个问题,需要编写一个程序来打印从 1
到 100
的数字。其中对于3
的倍数,打印Fizz
,对于 5
的倍数,打印Buzz
。
显而易见,可以使用循环和多个if-else
语句来实现。
如果使用java语言来完成,估计至少10行代码,但使用python,一行搞定!!!。
['FizzBuzz' if i%3==0 and i%5==0 else 'Fizz' if i%3==0 else 'Buzz' if i%5==0 else i for i in range(1,20 )] ## 👍👍👍👍
在上面的代码中,使用列表推导来运行一个从1
到 20
的循环,然后在循环的每次迭代中,检查数字:
- 如果能同时被
3
和5
整除,则用FizzBuzz
替换; - 如果只能被
3
整除,我们用Fizz
替换; - 如果只能被
5
整除,则用 Buzz 替换; - 否则仍然为原来的数字。
11. 回文数
回文是反转后看起来相同的数字或字符串。
text = 'level'
ispalindrome = text == text[::-1] ## 👍👍👍
print(ispalindrome) ## True
12. 空格分隔整数到列表
input_string = '1 2 3 4 5'
lis = list(map(int,input_string.split())) ## 👍👍👍
print(lis) ## [1, 2, 3, 4, 5]
13. Lambda 函数
lambda
函数是匿名函数。一个 lambda
函数可以接受任意数量的参数,但只能是一个表达式。
下面是一个简单的lambda
函数,它接受一个数字,并返回数字的平方:
sqr = lambda x: x * x ## 👍👍👍
sqr(10) ## 100
14. 检查元素是否在列表中
num = 5
res = 'present' if num in [1,2,3,4,5] else 'not present' ## 👍👍👍
print(res) ## present
15. 打印图案
用符号打印有趣的图案总是让我着迷。在python中,只需一行代码就可以绘制出惊人的图案:
n = 5 print('\n'.join('😀' * i for i in range(1, n + 1))) ## 👍👍👍
输出为:
😀
😀😀 😀😀😀 😀😀😀😀 😀😀😀😀😀
16. 计算阶乘
import math n = 6
print(math.factorial(n)) ## 720
17. 斐波那契数列
斐波那契数列,其中每个数字都是前面两个数字的总和。例如:最简单的斐波那契数列: 1, 1, 2, 3, 5, 8, 13
。
我们可以使用列表推导创建一个范围内的斐波那契数列。
fibo = [0,1] [fibo.append(fibo[-1]+fibo[-2]) for i in range(5)] ## 👍👍👍👍
print(fibo) ## [0, 1, 1, 2, 3, 5, 8]
18. 生成素数
素数是一个只能被它自己和 1
整除的数。例如: 2,3,5,7
。为了在一个范围内生成素数,可以使用带有过滤器filter
和lambda
的列表函数来生成素数。
prime = list(filter(lambda x:all(x % y != 0 for y in range(2, x)), range(2, 13))) ## 👍👍👍👍👍
print(prime) ## [2, 3, 5, 7, 11, 13]
19. 最大数
findmax = lambda x,y: x if x > y else y ## 👍👍
findmax(5,14) ## 14
20. 线性变换
有时需要将列表的元素缩放到 2倍或5倍。函数法实现:
def scale(lst, x):
return [i*x for i in lst] ## 👍👍scale([2,3,4], 2) ## [4, 6, 8]
21. 矩阵的转置
需要将所有行更改为列,反之亦然。在python中,可以使用zip
函数在一行代码中转置矩阵。当然在numpy中,可以直接使用transpose
函数。
a=[[1,2,3],
[4,5,6],
[7,8,9]] transpose = [list(i) for i in zip(*a)] ##👍👍
print(transpose) ## [[1, 4, 7], [2, 5, 8], [3, 6, 9]]
22. 正则表达式–模式匹配
当需要知道文本中某个模式出现的次数时,在 python 中,有re
库可以完成这些工作。
import re
res = re.findall('python','python is a programming language. python is python.')) ##👍👍👍👍
print(res) ## ['python', 'python', 'python']
当然
re
库不仅仅上面这么简单。re
是一个非常有用的库,帮助我们更好地处理文本。
23. 文本替换
s = "python is a programming language.python is python"
s = s.replace("python",'Java') ##👍
print(s) ## "Java is a programming language.Java is Java"
24. 模拟抛硬币
当需要从给定的集合中中些随机进行选择,random.choice
非常有用:
import random;
res = random.choice(['Head',"Tail"]) ##👍👍👍👍
print(res) ## Head or Tail
25. 生成组合元组
groups = [(a, b) for a in ['a', 'b'] for b in [1, 2, 3]] ##👍👍👍👍
print(groups) ## [('a', 1), ('a', 2), ('a', 3), ('b', 1), ('b', 2), ('b', 3)]
小节
以上就是我们分享的25个有趣且实用的pyhton单行代码,希望充实你武器库!