python基础

Posted by lily on April 7, 2023

格式化输出

数字保留几位小数

s = 1.345667
return "%.2f"%s
print("%.2f"%s)

sorted函数

  1. sorted(iterable, key=None, reverse=False)
    1. iterable – 要排序的可迭代对象
    2. key——指定可迭代对象里的一个以用来排序
    3. reverse – 排序规则,reverse = True 降序, reverse = False 升序(默认)
  2. sort 与 sorted 区别:
    1. sort 是应用在 list 上的方法,属于列表的成员方法,sorted 可以对所有可迭代的对象进行排序操作。
    2. list 的 sort 方法返回的是对已经存在的列表进行操作,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。
    3. sort使用方法为ls.sort(),而sorted使用方法为sorted(ls)

整除(//)与 / 后再取整(int强制转换)

  1. // 在python中为向下取整,即取到该小数比它最小的一位整数
  2. / 若结构为小数, 取得结果再用int()函数进行强制转换时,int()函数为向上取整。

    strip()函数

  3. strip ()函数在没有参数时会默认删除空白符,包括【’\n’】、【’\r’】、【 ‘\t’】和【’ ‘】
  4. Python中有三个去除头尾字符、空白符的函数,它们依次为:
    1. strip: 用来去除头尾字符、空白符(包括\n、\r、\t、’ ‘,即:换行、回车、制表符、空格)
    2. lstrip:用来去除开头字符、空白符(包括\n、\r、\t、’ ‘,即:换行、回车、制表符、空格)
    3. rstrip:用来去除结尾字符、空白符(包括\n、\r、\t、’ ‘,即:换行、回车、制表符、空格符

注意:这些函数都只会删除头和尾的字符,中间的不会删除。 ———————————————— 原文链接:https://blog.csdn.net/weixin_30336531/article/details/111905076


string.replace()函数

  1. replace()函数可以替换字符串任意位置的任意字符 ```python string = ‘{‘
    ‘skajdiadjil ‘
    ‘saISH}’ print(string.replace(“ “, ‘’))

# update()函数

- 使用方法:dict.update(ele)
- 可以将键值对/字典/等类型以键值对形式放入字典中
```python
d = {'one':1,'two':2}
d.update({'three': 3, 'four': 4}) # 传一个字典
'''输出结果'''{'one':1,'two':2, 'three': 3, 'four': 4}

d.update(five=5,six=6) #可以 传关键字
{‘one’: 1, ‘four’: 4, ‘three’: 3, ‘five’: 5, ‘two’: 2, ‘six’: 6}
#不能传入元组类型
#不能传入列表
'''输出结果'''
{‘seven’: 7, ‘one’: 1, ‘four’: 4, ‘three’: 3, ‘five’: 5, ‘two’: 2, ‘six’: 6, ‘eight’: 8}


reverse方法与reverse参数以及reversed()方法

  • reverse()方法用于【列表】元素的反顺序
    • list.reverse() ```python lista = [1, 2, 3, 4] lista.reverse() Print(lista.reverse()) print(lista) ‘'’输出结果分别为’’ None [4, 3, 2, 1]

- reverse参数用于sort()方法与sorted()函数等排序
- reversed(self)函数是python自带的一个方法
   - list.reversed()返回的是一个把序列值经过反转之后的**迭代器**
   - **要经过对象转换之后才能够输出**
```python
bb = [1,3,5,7]
print(list(reversed(bb)))  经过list()函数转换
'''输出结果'''
[7, 5, 3, 1]

元组的创建

  • 使用小括号直接创建——tuple1 = (1,2,3,4)
  • 使用tuple()函数将其他类型数据强行转换成元组类型
    • tuple(lst[1,2,3,4])

yield语句——列表生成式generator

python内置数据类型

数据类型三种

float:

超出精度范围会在强制类型转换时四舍五入2**16
a = 10.99999999999999999999
print(float(a))
输出11.0
没超出精度范围
a = 10
print(float(a))    输出11.0

int:

a = 10.99
print(int(a))  输出10强制转换不四舍五入
a = int(input())——————>指定输入整型
若输入浮点数或其他不能转换类型会报错字符串
//这种输入形式不安全//不稳定//而且直接操作用户输入数据
print(a)

这里可以考虑用eval()函数”还原“数据类型

  • int()函数还提供了转换为16进制整数的方法int(a, 16)

    str

  1. 用spilt()函数分割str(字符串类),每个分割单位会成为独立字符串而带上“ ”

    find() and index()

    a='abcde'
    使用find与index查找'''元素'''并返回索引值
    '''rfind与rindex从后向前查找'''
    print(a.find('9'))//返回-1
    print(a.index('9'))//程序报错
    
  • find只适用于字符串的查找
  • index适用于列表以及字符串的查找

生成随机列表——导入random库

import random

lst = list(range(1000))  '''列表生成器生成0-1000的有序列表'''
random.shuffle(li)   '''打乱列表内顺序'''

获取程序运行时间——time库

from cal_time import *
@cal_time   #装饰器:调用计时器函数
'''暂时先把打印内容先注释,否则也会占用时间'''

#计时器函数
import time

def cal_time(func):
	def wraper(*args,**kwargs):
		t1 = time.time()
		result = func(*args,**kwargs)
		t2 = time.time()
		print('%s running time %s second' % (func.__name__, t2-t1))
		return result
	return wraper

image.png ps:假如计时递归函数,计时器会把每一层递归调用的时间都打印出来

递归深度的改变

import sys
# 如果确实需要很深的递归深度,可以使用sys模块中的setrecursionlimit()函数修改默认的最大深度限制。
sys.setrecursionlimit(1000)
# 这是一个简单的递归函数
def demo(n=0):
    try:
        demo(n+1)
    except:
        print(n)
        
demo()

定义一个无限大的小数及min()函数

a = float("inf")
number = 10
a = min(a, number)
  • float(“INF”)表示为正无穷;
  • float(“-INF”)表示负无穷

    pycharm报错

  • 当py文件明称被设置为python内置或导入的模块以及库的名字时运行会报错

    and/or/not 的优先级

  • 优先级:not > and > or

1、not与紧跟其后的那个条件是不可分割的 2、如果条件语句全部由纯and、或纯or连接,按照从左到右的顺序依次计算即可

匿名函数

func = lambda x, y:x*y
  • 匿名函数lambda的使用使得函数更简洁,更像一个表达式
  • “** :** ”冒号前面是传入的参数,后面是参数执行的动作

把列表转换为字典

启用collections 里的 Counter模块 d = Counter(list)

遍历获取下标与索引值(enumerate)

>>> seq = ['one', 'two', 'three']
>>> for i, element in enumerate(seq):
...     print i, element
...
0 one
1 two
2 three

列表值交换位置

print("=================给列表元素赋值====================")
a = [1,2]
i = a[0]
i, a[1] = a[1], i
print(a)
print("=================交换两个列表元素==================")
a = [1,2]
a[0], a[1] = a[1], a[0]
print(a)

@遍历时改变当前指向元素后跳过改变值的问题

例题:41.缺失的第一个正整数(从1–n+1) 原地哈希算法(java代码示例) 原本的逻辑是:把数字为 **num **的元素放置到 **num-1 **的下标上, 遍历指针目前为 **i ** 把数字为 **num **的元素放置到 **num-1 **的下标上,大于数组长度的数以及小于0的数不排序(用这些数作索引值,超出索引范围),并且假若该元素已经归位也不用进行排序 image.png 由于某个元素被交换到 当前指针 i 的位置上,所以改为while会让这个位置上的数继续进行判断并一直调整位置,直到 i 位置上的数在合适的位置为止,所以把 if 改为 while
image.png

# 原地哈希

sum()方法

sum(iterable[, start]) iterable:可迭代对象 [,strat]:可迭代对象的起始值

sum([0,1,2])             # 列表求和
sum((2, 3, 4), 1)        # 元组计算总和后再加 1
sum([0,1,2,3,4], 2)      # 列表计算总和后再加 2

列表生成式

li = [i for i in range(n) ] li = [0 for _ in range(n)] li = sum([1 for i in list1 if i > 2 ]) __统计list1里大于2的数有多少个 第一个 i **为要生成到列表里的对象,第二个 i 为列表生成式里的迭代对象,生成结束即释放。 **第一个i第二个i含义不同,第二个i可以为任意临时变量,第一个i是要真实添加到列表里的元素,若第一个i第二个i相同,则代表每次第二个i生成后都会赋给第一个i再传入列表中

append()和extend()

每次添加一个元素,而extend()可以把列表中的所有元素一个个加进列表里

asci码和字符之间的相互转换

  • chr()可以把asci码换成对应字符
  • ord()可以把字符换成对应的asci码

range()函数

  • 要逆序计数,range(n, -1, -1),逆序计数[0, n],range范围为[n, -1),因为左闭右开,所以n–直到等于0时会结束,步长为-1.

repr函数

1.str()一般是将数值转成字符串,str()函数得到的字符串可读性好(故被print调用) 2.repr()是将一个对象转成字符串显示,repr() 函数将对象转化为供解释器读取的形式。支持dict和list。 repr是representation及描述的意思,不是对人的描述,而是对python机器的描述,也就是它会将某物返回一个它在python中的描述。对python友好。

类的创建

tips:class + 类名,类名后可加括号也可不加括号。

globle和nonlocal关键字

globle: 在函数内部或者是其他局部区域使用全局变量 在函数内部对全局变量进行修改时需要在函数内部把要修改的变量声明为全局变量,然后才能对该变量进行修改。 若只使用不修改,可不声明。 nonlocal: nonlocal声明的变量非局部变量也非全局变量 nonlocal声明于外部变量,其相对于内部嵌套的函数。