日常Python Tips
Python中使用remove命令导致的问题:
1
2
3
4
5
6# wrong code example:
list_a=[1,2,3,4,5,6]
list_b=[1,2,4]
for i in list_a:
if i not in list_b:
list_a.remove(i)上述代码的目的是为了将
list_a
与list_b
做交集,并取list_a
的交集部分。但是由于python中remove函数会导致列表结构的索引会少于原始列表,并导致无法完全遍历整个列表,最终出现上述结果为list_a=[1,2,4,6]
。下面演示正确代码:
1
2
3
4
5
6# Correct code example:
list_a=[1,2,3,4,5,6]
list_b=[1,2,4]
for i in list_a[::-1]:
if i not in list_b:
list_a.remove(i)通过将list_a反序遍历,即可避免remove函数导致的索引缺失问题。关键方法:
[::-1]
。Python中时间模块的使用方法
1
2
3
4
5
6
7
8import time
time.localtime(time.time())
'''
作用是格式化时间戳为本地的时间。
输出结果为time.struct_time(tm_year=2020, tm_mon=8, tm_mday=17, tm_hour=14, tm_min=22, tm_sec=39, tm_wday=0, tm_yday=200, tm_isdst=0)
'''
#使用time.strftime()进行格式化
date=time.strftime('%Y-%m-%d',time.localtime(time.time()))通过上述方法,可以得到参数date为
'2020-8-17'
。对于创建csv文件或文件夹时,可以加入其中作为标签。非常实用!Python中pathlib模块使用,用于对路径进行分段:
1
2
3
4
5
6
7
8import pathlib
now_path = pathlib.Path.cwd() / "demo.txt"
print("name",now_path.name)
print("stem",now_path.stem)
print("suffix",now_path.suffix)
print("parent",now_path.parent)
print("anchor",now_path.anchor)
输出结果:
1
2
3
4
5name demo.txt
stem demo
suffix .txt
parent /Users/chennan/pythonproject/demo
anchor /pathlib中使用
Path.iterdir(path_name)
获得path_name
下所有文件或文件夹名称的列表时,需要使用list(Path.iterdir(path_name))
方法,才能与过去os.listdir(path_name)
一致Python中利用strip函数可以去除字符串首尾特定的字符,且即使没有相应的字符,也不会报错
args
和kwargs
是python中的可变参数:args
表示任意多个无名参数,返回一个tuple;kwargs
表示关键字参数,返回一个dict。其实并不是必须写成
*args
和**kwargs
。 只有变量前面的*
(星号)才是必须的. 你也可以写成*var
和**vars
. 而写成*args
和**kwargs
只是一个通俗的命名约定。同时使用args和kwargs时,args参数必须在kwargs参数之前,像
foo(a = 1, b = '2', c = 3, 'a', 1, None)
这样的调用,会提示语法错误“SyntaxError: non-keyword arg after keyword arg”用法演示:
1
2
3
4
5
6
7
8
9
10
11
12#输入
def test(a, *args, **kwargs):
print(a)
print(args)
print(kwargs)
test(1, 2, 3, d = '4', e = 5)
#输出
1
(2, 3)
{'d': '4', 'e': 5}**kwargs
的巧妙用法(python自带的dict就是利用kwargs创造字典):Python中确认两个list中元素是否完全一致,可以通过sorted排序后,进行全等比较。不能用sort方法,因为sort无返回值,而sorted会返回列表
1
2
3
4
5
6a=['a','b','c']
b=['c','a','b']
if a.sort()==b.sort():
print('列表a和列表b中元素完全一致')
else:
print('列表a和列表b中元素存在差异')Python 进度条模块tqdm在windows环境下为了使进度条美观的只在一行呈现,可增加ncols参数:
1
2for i in tqdm(range(100),ncols=80)
j = i*i使用pyinstaller打包python脚本时,可通过–exclude-module=pandas方法去除不需要的模块,从而缩小成品软件体积。
1
pyinstaller --exclude-module=pandas --exclude-module=numpy --exclude-module=PIL --exclude-modulue=lxml belle.py
List可以用index()函数确认其中某个元素在list中的位置信息。
listname.index(str,start,end)
Python爬虫遇到\xa0时,可通过
输出字符串=””.join(输入字符串.split())
获取Python中函数参数中的冒号是参数的类型建议符 :
1
2
3
4
5
6
7
8
9
10
11
12
13#!/usr/bin/python3
# -*- coding:utf-8 -*-
def twoSum(num1: int, num2: int=100) -> int:
sum = num1 + num2
return sum
if __name__ == "__main__":
print(twoSum.__annotations__)
print(twoSum(1,2))
print(twoSum(1))
print(twoSum('I love ','Arsenal'))
#print(twoSum('Arsenal'))1
2
3
4{'num1': <class 'int'>, 'num2': <class 'int'>, 'return': <class 'int'>}
3
101
I love ArsenalPython中判断数据类型的方式:
1
2
3
4# 判断输入的item是否是字符串类型
if isinstance(item,str):
……
……Python中将字符串编码转化为 %xx 的形式
1
2
3
4
5
6
7
8
9
10
11from urllib.parse import quote
"""特殊符号:汉字、&、=等特殊符号编码为%xx """
KEYWORD = '苹果'
url = 'https://s.taobao.com/search?q=' + quote(KEYWORD)
print(url)
# 运行结果:https://s.taobao.com/search?q=%E8%8B%B9%E6%9E%9C
KEYWORD = '='
url = 'https://s.taobao.com/search?q=' + quote(KEYWORD)
print(url)
# 运行结果:https://s.taobao.com/search?q=%3DPython中将字典参数编码为URL查询字符串,即转换成以 key1=value1&key2=value2 的形式
1
2
3
4
5
6
7
8
9from urllib.parse import urlencode
base_url = "https://m.weibo.cn/api/container/getIndex?"
params1 = {"value": "english", "page": 1}
url1 = base_url + urlencode(params1)
print(urlencode(params1))
# value=english&page=1
print(url1)
# https://m.weibo.cn/api/container/getIndex?value=english&page=1Python中列表查重方法
1
2
3
4
5from collections import Counter #引入Counter
a = [29,36,57,12,79,43,23,56,28,11,14,15,16,37,24,35,17,24,33,15,39,46,52,13]
b = dict(Counter(a))
print ([key for key,value in b.items()if value > 1]) #只展示重复元素
print ({key:value for key,value in b.items()if value > 1}) #展现重复元素和重复次数Python正则匹配中的贪婪及非贪婪模式
{X,Y}
为贪婪模式匹配贪婪模式,总是尝试匹配尽可能多的字符;
非贪婪模式则相反,总是尝试匹配尽可能少的字符。
Python
replace
方法细节注意:
字符串是不可以修改的类型,使用replace方法并不能修改原始的字符串,举例如下1
2
3
4
5
6# 输入代码
str= "abcdef"
print(str.replace("abc",'AAA'))
print((str))
print(id(str))
print(id(str.replace("abc",'AAA')))1
2
3
4
5输出结果:
AAAdef
abcdef
10515104
12049600如果你想要通过str的引用得到修改后的值,那么,将str这个变量指向修改后的内存地址即可
str=str.replace(”abc”,”AAA”)