Python全网总结 [‘编程技巧‘, ‘骚技巧‘, ‘奇淫技巧‘] 一览-------持续更新和修改中(只要头发还在)

在这里插入图片描述

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、总结

未完,待续,请多关照!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

shareone2

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值