一、输入列表
首先要明白input()
获得的是字符串
第一种:自动构造tuple或list
计算第一个时间与第二个时间的差
输入样例:
6 30 23 20
输出样例:
16:50
h1, m1, h2, m2 = (float(num) for num in input().split()) #()返回tuple,[]返回list
m = m2 - m1
if m < 0:
m += 60
h2 -= 1
print('%d:%d' % (h2 - h1, m))
第二种:对字符串切割
对字符串切割(split()
默认空格)返回元组
a,b,c = input().split() #split(',')对','切割
第三种:eval
eval()
的参数是:字符串表达式,eg.2+3
(返回5)、1, 2, 3
(返回元组)
x,y,z = eval(input())
二、数学运算
幂运算:a**(x/y)
表示a
的x/y
次方
由此拓展:a的3次方a**3
,a的5次方根a**(1/5)
三、字符串
1、字符串切片
字符串切片公式:str = [start: end:step]
step 默认步长为1(str = [start: end])
end 默认取到最后 (str = [start: ])
start 默认从头开始(str = [:end ])
start和end同时省略 copy(str = [:] 或 str = [::])
当step为负数时(从右向左切),eg.'Zhejiang University'[:-9:-2]
结果为yirv
2、字符串切割split
1、设置单个切割符split()
默认以空白符为切割符,split(',')
则以逗号为切割符。
2、设置多个切割符,例如分别设置.!?
三个为切割符。
import re
s = input()
ls = re.split("[.!?]+",s)
print(ls)
#输入:you are a sight sore eyes! you look well.
#输出:['you are a sight sore eyes', ' you look well', '']
3、字符串替换
s = '12;23;'
print(s.replace(';',','))
四、排序
Python 列表有一个内置的 list.sort()
方法可以直接修改列表。还有一个 sorted()
内置函数,它会从一个可迭代对象构建一个新的排序列表,该函数可支持字典排序。
sorted(__iterable, key=None, reverse=False)
根据 iterable 中的项返回一个新的已排序列表。
具有两个可选参数,它们都必须指定为关键字参数:
- key 指定带有单个参数的函数,用于从 iterable 的每个元素中提取用于比较的键 (例如 key=str.lower)。 默认值为None (直接比较元素)。
- reverse 为一个布尔值。 如果设为 True,则每个列表元素将按反向顺序比较进行排序。
使用 functools.cmp_to_key() 可将老式的 cmp 函数转换为 key 函数。
1、list排序普通用法
按照第一个元素排序,默认是小到大,反转成大到小
lst = [(9, 4), (2, 10), (4, 3), (3, 6)]
lst.sort(key=lambda item: item[0],reverse=False)
print(lst)
优先第二个,然后再第一个
lst = [(9, 4), (2, 10), (4, 3), (3, 6)]
lst.sort(key=lambda item:(item[1],item[0]))
print(lst)
2、字典排序普通用法
优先第二个,然后再第一个
d = {'a':'asd','fsd':'123','12f':'123'}
ls = sorted(d.items(),key=lambda x:(x[1],x[0]))
3、高级用法
自定义函数cmp,在python3中sorted
没有cmp参数,需要functools.cmp_to_key()
修饰自定义cmp函数。其中相等返回0,否则返回1或-1
from functools import cmp_to_key
def cmp(a,b):
# 按照第二个值大到小排序
return 1 if a[1] < b[1] else -1 if a[1] < b[1] else 0
d = {'a':'asd','fsd':'123','12f':'123'}
ls = sorted(d.items(),key=cmp_to_key(cmp))
五、深浅拷贝
深拷贝和浅拷贝都是对Python中对象的复制,占用不同的内存空间。深拷贝会完全拷贝父对象及父对象内部的子对象,而浅拷贝会拷贝父对象,但不会拷贝父对象内部的子对象。
1、字典拷贝
浅拷贝
dic = {"C":1,"Java":2,"Python":4,"CJavaPy":5}
d1 = dict(dic)#浅拷贝
print(d1)
d2 = dic.copy() #浅拷贝
print(d2)
深拷贝
from copy import deepcopy
dic = {"C":1,"Java":2,"Python":4,"CJavaPy":5}
d1 = deepcopy(dic) #深拷贝
print(d1)
六、基础配置
跨项目自定义模块找不到时,需要配置模块路径(环境变量)
参考:https://docs.python.org/2/tutorial/modules.html#the-module-search-path
当导入一个名为的模块时spam,解释器首先搜索具有该名称的内置模块。如果未找到,它将搜索spam.py变量 给定的目录列表中 指定的文件sys.path。 sys.path从这些位置初始化:
- 包含输入脚本的目录(或当前目录)。
- PYTHONPATH(目录名称列表,与 shell 变量的语法相同PATH)。
- 依赖于安装的默认值。
初始化后,Python 程序可以修改sys.path. 包含正在运行的脚本的目录放置在搜索路径的开头,标准库路径之前。这意味着将加载该目录中的脚本而不是库目录中的同名模块。除非有意更换,否则这是一个错误。有关详细信息,请参阅标准模块部分 。
pycharm做法:https://blog.csdn.net/csdnhuizhu/article/details/104525634