文章目录
0、前言
计算机普通小白一枚,文章不一定多好,希望看客多多关照!
放弃应该容易,但坚持下来一定很酷!
十分感谢大家的支持!
1、字符串技巧
(1)单行过长字符串
# 利用链接符将单行字符串链接在一起,符合代码规范
s = 'ss' \
'cc' \
'dd'
print(s)
# 输出结果: ssccdd
# 解决问题: 单行字符串过长,需要分开写!
(2)多行字符串
# 利用三引号可以将字符串以及\n包含为整体。
# 三引号只能是由三个单引号或者双引号组成。
s = """smart
ss
ss"""
print(s)
d = '''smart
ss
ss'''
print(d)
# 输出内容均为: smart
# ss
# ss
# 解决问题: 需要写出多行字符串满足来某些要求!
(3)拼接字符串
# 字符串重载 + 号运算符用以拼接
a = '123'
b = '456'
c = 'abc'
print(a + b + c)
# 123456abc
2、变量处理技巧
(1)变量赋值与变量换值
# C语言写法
a = 1
b = 2
c = 3
d = 4
# python写法
a, b, c, d = 1, 2, 3, 4
- 原理: 在赋值号的右侧形成了个新的元组,而左侧则立刻对那个未被引用的元组解析到变量中。一旦解析完成,未被引用的元组会被python解释器当作垃圾回收。
验证:
a = 1, 2, 3, 4
print(a)
# 输出结果: (1, 2, 3, 4)
拓展:
a, b, c, d = [1, 2, 3, 4]
# 原理同上
- 所以: 由此我们可以推导出两个变量或者任意变量之间交换值的写法。或者准确来说应该是任意变量的值先取出来组成未被引用的元组,之后再按编程者指定顺序来重新赋值给这些变量。指定顺序即为赋值号左边变量的顺序。
# 两个变量之间交换值的写法
a, b = 1, 2
a, b = b, a
# 任意变量之间交换值的写法
a, b, c, d = 1, 2, 3, 4
b, d, a, c = a, b, c, d
3、列表处理技巧
(1)列表最后一个元素获取
- 在python中: 每当需要访问列表最后一个元素的时候均可以使用索引-1,这在任何情况下均行之有效。
a = [1, 2, 3, 4, 5]
print(a[-1])
# 输出结果为: 5
- 既然如此: 那么获取倒数第n个值也可以用类似的方法。
# 获取列表倒数第2个值
a = [1, 2, 3, 4, 5]
print(a[-2])
# 输出结果为: 4
(2)反转列表及其拓展
1、reverse() or reversed()
a = [1, 2, 3, 4, 5]
a.reverse()
print(a)
# 输出结果为: [5, 4, 3, 2, 1]
# 由此现象可以看出,reverse是永久反转这个列表的。
# 对于临时反转列表来说可以使用reversed方法,但是其返回的是逆序列的迭代器
# 所以可以选择如此遍历
for j in reversed(a):
print(j)
# 1
# 2
# 3
# 4
# 5
# 也可以选择配合列表解析使用
print([j for j in reversed(a)])
# 输出结果为: [1, 2, 3, 4, 5]
2、列表切片
# 列表切片含有步长,所以我们让步长为-1即可
a = [1, 2, 3, 4, 5]
print(a[::-1])
# 输出结果: [5, 4, 3, 2, 1]
3、拓展研究
- python中: 字符串也是可以反转的,但是它没有reverse()方法。
a = '12345'
print([j for j in reversed(a)])
print(a[::-1])
# 输出结果: ['5', '4', '3', '2', '1']
# 54321
(3)二维列表获取方法
1、错误做法
a = [[0] * 3] * 2
print(a)
# 输出结果: [[0, 0, 0], [0, 0, 0]]
a[0][0] = 1
print(a)
# 输出结果: [[1, 0, 0], [1, 0, 0]]
# 本意是修改一个元素,但是最后发现将第0列全部给修改了
- 原因: [[]] * 2表示2个指向这个一维列表的引用,是一种浅拷贝,因此修改任何一个元素都会改变一整列 (因为这一整列就是这一个元素而已)。
2、循环创建二维列表
# 创建一个3行4列的二维列表
a = []
for _ in range(3):
a.append([0] * 4)
3、列表解析创建二维列表
a = [[0 for _ in range(3)] for _ in range(2)]
4、利用numpy快速创建二维列表
array
import numpy as np
a = np.array([[0] * 4] * 3)
- 优点: 充分利用多线程,连续存储等优势,对矩阵的创建以及操作具有极高的速度优势。(我是小白,不懂其中高深的算法,抱歉了,看官大人!)
- 原理: 不理解,看到的大神可以来一波分析了!如果莫有人看到的话,等我有朝一日学会了,一定更新!
(4)列表遍历
a = [1, 2, 3, 4, 5]
for j in a:
print(j)
# 等价于
# 调用range和len方法,不用想都比上面的慢
for j in range(0, len(a)):
print(a[j])
(5)一行确定列表元素是否都一致
x = [1, 1, 1, 1, 1]
print(x[1:] == x[:-1])
# true
# 原理: 切片的本质是循环。第0个与第1个比较,紧接着第1个与第二个比较,直到n-1与第n个比较完成。
(6)将两个链表拼接为一个链表
a = [1, 2, 3, 4]
b = ['ss', 'yy', 'zz']
a = a + b # 直接这么操作即可,不需要extend()方法
print(a)
# [1, 2, 3, 4, 'ss', 'yy', 'zz']
4、元组处理技巧
(1)拥有一个元素的元组
- 注: 拥有一个元素的元组必须在元素后面加上一个 ‘,’ 以防止被识别成一个变量的值
typle = ('hi', )
5、字典(dict)和集合(set)处理技巧
(1)字典和集合解析
# 处理列表可以解析,它俩也可以。
test_dict = {j: j ** 3 for j in range(10)}
print(test_map)
# {0: 0, 1: 1, 2: 8, 3: 27, 4: 64, 5: 125, 6: 216, 7: 343, 8: 512, 9: 729}
test_set = {j ** 3 for j in range(10)}
print(test_set)
# {0, 1, 64, 512, 8, 343, 216, 729, 27, 125}
(2)有序字典
# 使用模块collections中的OrderedDict类记录字典键值对的添加顺序
from collections import OrderedDict as od
test_dict = od()
test_dict['smart'] = 'boy'
test_dict['foolish'] = 'child'
test_dict['sweet'] = 'fish'
for key, value in test_dict.items():
print(key, value)
# smart boy
# foolish child
# sweet fish
(3)有序集合
# python中可以利用set函数对列表去重,之后利用list函数再转换成列表,之后利用sorted函数排序
a = [1, 1, 2, 3, 4, 5, 5, 5, 5, -4, -4, -4]
out = sorted(list(set(a)), key=a.index)
6、分支结构处理技巧
(1)链状比较操作符
# 对于一个变量的一些比较条件聚合到一起增加其可读性
n = 3
print(1 < n < 10)
# True
print(1 > n < 10)
# False
(2)三目运算符
- 注: [表达式为真的返回值] if [表达式] else [表达式为假的返回值]
# 利用三目运算符进行列表推导并配合链状比较操作符写出列表解析
a = [m if 2 < m < 5 else m ** 2 for m in range(0, 10)]
print(a)
# [0, 1, 4, 3, 4, 25, 36, 49, 64, 81]
(3)in 和 not in
a = 3
if a == 2 or a == 3 or a == 4 or a == 5 or a == 6:
print(True)
# 等效代替
if a in [2, 3, 4, 5, 6]:
print(True)
# not in同理
print(True) if a != 2 and a != 3 and a != 4 and a != 5 and a != 6 else print(False)
# 等效代替
print(True) if a not in [2, 3, 4, 5, 6] else print(False)
(4) 列表不为空则真
a = [2, 3]
if a:
print(True)
# True
7、函数处理技巧
(1)返回多个值
- 注: 原理与变量换值一样,均是形成非引用的元组。
def a():
return 1, 2, 3, 4, 5
print(a())
# (1, 2, 3, 4, 5)
(2)列表作为函数参数
- 注: 列表作为函数参数,想维持原样可以使用列表解析把列表备份当作实参。
# 将列表清0的函数
def zero(base):
for i in range(len(base)):
base[i] = 0
return
a = [1, 2, 7]
b = [1, 2, 5]
zero(a)
zero(b[:]) # 列表备份作为实参传递
print(a)
print(b)
# [0, 0, 0]
# [1, 2, 5]
(3)链式函数调用
def add(a, b):
return a + b
def sub(a, b):
return a - b
x = 2
print((add if x == 3 else sub)(10, 2))
# 8
# 一定要注意,两个函数的形参列表中必须传入的参数个数保持一致
8、巧用python库函数
(1)join()函数
- 多用于字符串的拼接
- 语法: ‘sep’.join(seq)
- 参数: sep为分割的字符串,seq为字符串列表等…
# 可用于字符串拼接
a = ['ss', 'dd', 'xx']
print(''.join(a))
# ssddxx
# 可以用特定字符串分割原有字符串列表
a = ['ss', 'dd', 'xx']
print(' '.join(a))
# ss dd xx
(2)split()函数
- 多用于字符串的分割
- 语法: ‘sep’.split(seq)
- 参数: sep为被分割的字符串,seq为分割的字符串。
manager = '托塔天王,太白金星,卷帘大将'
manager_list = manager.split(',')
print(manager_list)
# 托塔天王 太白金星 卷帘大将
9、巧用python模块
(1)打印模块路径
import socket
print(socket)
# <module 'socket' from 'C:\\Users\\DELL\\AppData\\Local\\Programs\\Python\\Python37\\lib\\socket.py'>
10、总结
未完,待续,请多关照!