IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 一行Python都可以做什么?这35行看懂十行就算入门,全能看懂必是高手 -> 正文阅读

[Python知识库]一行Python都可以做什么?这35行看懂十行就算入门,全能看懂必是高手

预览

  1. 1<2<3>2>1
  2. (func1 if a>b else func2)(a,b)
  3. c = [*a,*b]
  4. c = {**a, **b}
  5. a,b = b,a
  6. [x**2 for x in range(10)]
  7. [x**2 for x in range(10) if x%3==0]
  8. {str(i):i for i in range(5)}
  9. {x**2 for x in range(-5,5)}
  10. eval('[1,2,3]')
  11. ast.literal_eval('1+1')
  12. itertools.chain(*a)
  13. map(lambda x: lst[x * size:x * size + size], list(range(0, ceil(len(lst) / size)))))
  14. list(zip(*lst))
  15. max(set(lst),key=lst.count)
  16. len(lst) == len(set(lst))
  17. list(set(A).difference(B))
  18. return [a for a in A if fn(a) not in set(map(func, B))]
  19. list(filter(func,myList))
  20. list(enumerate(orders,2))
  21. 'python'*4
  22. s == s[::-1]
  23. "python".title()
  24. string[0].lower() + string[1:]
  25. '-'.join(['2021','3','10'])
  26. len(len(re.findall(r [aeiou] , str, re.IGNORECASE)))
  27. Counter(first) == Counter(second)
  28. (len(string.encode('utf-8'))
  29. dict([[1,2],[4,5],[6,7]])
  30. dict(zip(myDict.values(),myDict.keys()))
  31. a.update(b)
  32. sys.getsizeof(variable)
  33. id(val)
  34. time.time()-tStart
  35. calendar.prmonth(2021,3)

语法特性

链式比较

比较运算符可以像普通运算符一样链式使用,但其运算顺序类似于“并行”,例如下列代码

>>> 1<2<3<4>3>2
True
>>> 3<5<4
False

对于类似a<b<c的代码,其结果等价于(a<b)&(b<c)

三元表达式

对于如下表达式

def judge(a,b,func1,func2):
    if a>b:
        return func1(a,b)
    else:
        return func2(a,b)

可以简化成

def judge(a,b,func1,func2): 
    return (func1 if a>b else func2)(a,b)

或者

judge = lambda a,b,f1,f2 : (f1 if a>b else f2)(a,b)

星号索引

在python中没有指针,但有时*可以起到类似指针的功能,对结构体中的数据进行索引,从而完成合并的操作。

例如,对于列表数据,可用单星号索引,表示如下

>>> a = [1,2,3]
>>> b = [4,5,6]
>>> [*a,*b]
[1, 2, 3, 4, 5, 6]

对于字典数据,采用双星号索引,如

>>> a = {"x" : 1,  "y" : 2}
>>> b = {"y" : 3,  "z" : 4}
>>> c = {**a, **b}
>>> c
{'x': 1, 'y': 3, 'z': 4}
>>>

交换元素位置

在python中
交换元素值并不需要中间变量

a = 3
b = 4
a,b = b,a

这是因为python中默认的复制方式是将一个元组赋值给另一个元组

>>> a = 3,4
>>> a
(3, 4)
>>> (a,b) = [3,4]
>>> a,b
(3, 4)

推导式

在python中可以通过推导式快速生成list、dict等数据结构。其表达式为

[表达式 for 迭代变量 in 可迭代对象 if 条件表达式]

例如

#生成10以内整数的平方列表
>>> [x**2 for x in range(10)]         
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
#生成可被3整除的10以内整数的平方列表
>>> [x**2 for x in range(10) if x%3==0] 
[0, 9, 36, 81]
#生成字典
>>> {str(i):i for i in range(5)}
{'0': 0, '1': 1, '2': 2, '3': 3, '4': 4}
#生成集合-5到5的所有整数平方的集合
>>> {x**2 for x in range(-5,5)}
{0, 1, 4, 9, 16, 25}

追根溯源会发现,推导式得到的实际上是一个生成器。

>>> gen = (x**2 for x in range(10))
>>> next(gen)
0
>>> next(gen)
1
>>> next(gen)
4
>>> list(gen)
[9, 16, 25, 36, 49, 64, 81]

字符串转为表达式

在python中,可以通过eval将字符串转为表达式

>>> eval('[1,2,3]')
[1, 2, 3]
>>> eval('1+1')
2

eval功能过于强大,这里不建议使用。比较推荐ast包中的literal_eval函数。相对于eval来说,literal_eval可以鉴别非法输入,以提高安全性。

from ast import literal_eval
>>> literal_eval('[1,2,3]')
[1, 2, 3]
>>> literal_eval('1+1')
ValueError: malformed node or string: <_ast.BinOp object at 0x000001A402566E20>

列表操作

改变维度

列表展开

对于形如[1, [2], [[3], 4], 5]的列表,将其展开为[1,2,3,4,5]。算法思路为,遍历列表A0中的元素,如果该元素A1仍为列表,则将A1的元素追加到A0的末尾。

def flatten(lst):
    i = 0
    while(i<len(lst)):
        if isinstance(lst[i],list):
            lst.extend(lst[i])
        i += 1
    return [n for n in lst if not isinstance(n,list)]

>>> lst = [1, [2], [[3], 4], 5]
>>> flatten(lst)
[1, 5, 2, 4, 3]

列表降维

当列表中的所有数据均为列表时,可以通过单星号索引之后,用itertools中的chain函数进行拼接。

>>> from itertools import chain
>>> a = [[1, 2], [3, 4], [5, 6]]
>>> chain(*a)
[1, 2, 3, 4, 5, 6]

列表分块

python内置了map函数,可以遍历列表并对每个元素进行映射。对于list(map(func,myList)),等价于[func(e) for e in myList]。根据这个特性,可以对列表进行分块。

from math import ceil   #ceil为向上取整

def chunkByFor(lst, size):
    return [lst[x*size:x*size+size] 
        for x in range(0,ceil(len(lst)/size))]

def chunkByMap(lst, size): 
    return list(
        map(lambda x: lst[x * size:x * size + size],    	
            list(range(0, ceil(len(lst) / size)))))    	

chunk([1,2,3,4,5],2) # [[1,2],[3,4],5]

列表转置

zip可以像拉链一样将数组中对应的值缝合起来,以元组的形式重新存储。根据这个特性,可完成列表的"转置"。

>>> lst = [[1,2], [3,4], [5,6]]
>>> list(zip(*lst))
[(1, 3, 5), (2, 4, 6)]

查找与检测

查找众数

list封装了count方法,可以统计元素个数,例如

>>> lst =  [1,2,1,2,3,2,1,4,2]
>>> lst.count(1)
3   #即lst中1出现了3次

而最大值选取函数max中有一个参数key,表示选取最大值的依据,例如

>>> x = [-2,-1,0,1,2]
>>> def test(x): return x**2-2*x
...
>>> max(x,key=test)
-2

表示选出当函数test值最大时的自变量。

根据这两个特点,可以得到查找列表中出现次数最多元素的方法为

>>> lst = [1,2,3,4,5,2,3,2,1,2,4]
>>> max(set(lst),key=lst.count)
2

判断重复

借助set中元素不重复的特性,可以检验非set数据中是否有重复数据。

def isUnique(lst):    	
    return len(lst) == len(set(lst)) 

>>>x = [1,2,3,4,5,5]
>>>y = [1,2,3,4,5]	
>>>isUnique(x)
False
>>>isUnique(y)
True

比较元素差异

在python中,集合set提供了类似做差的操作difference。对于集合AB而言,若想实现A-B的功能,可采取A.difference(B)的方案。

对于其他数据结构,可先转为set再行做差。且difference会自动将输入变量转为set

>>> A = [1,2,3]
>>> B = [1,2,4]
>>> list(set(A).difference(B))
[3]

比较列表计算后的差异

现有一函数func,对于两组数据AB,如果希望得到func(A)func(B)的差别,也可以采用set的特性。

def funcMinus(A, B, func):	
    B = set(map(func, B))     #剔除func(B)中的重复元素
    return [a for a in A if fn(a) not in B]	

筛选数据

filter是python的内置函数,用于过滤不符合条件的数据。list(filter(func,myList))等价于[e for e in myList if func(e)==1]

索引和运算符

为列表添加索引

enumerate可以将列表、元组等组合为索引序列,并可以声明初始值,例如

>>> orders = ['first','second','third']
>>> list(enumerate(orders))
[(0, 'first'), (1, 'second'), (2, 'third')]
>>> list(enumerate(orders,2))
[(2, 'first'), (3, 'second'), (4, 'third')]
>>>

这可以非常方便地应用到for循环中

>>> for i,val in enumerate(orders,1):
...   print(i,val)
...
1 first
2 second
3 third

字符串和列表的加法与乘法

在python中,字符串或者list可以进行加法和数乘运算,前者表示拼接,后者表示叠加。

>>> s = 'python'
>>> s+s
'pythonpython'
>>> s*4
'pythonpythonpythonpython'

回文

在python中,对列表或者字符串采用:进行索引,例如a:b指的是从a到b的数据;当采用双引号::时,引号间的值的意义就发生了变化,例如a:b:c表示从a到b,间隔为c的数据。

据此,可以得到::-1表示将字符串颠倒过来,据此可以判断一个字符串是否为回文结构

>>> s = "abcde"
>>> s[::-1]
'edcba'
>>> s == s[::-1]
False

字符串操作

首字母大小写

python中,字符串内置title()函数,可以将字符串内每个词进行首字母大写。

"python".title()

python字符串提供了.lower.upper函数,可以进行大小写转换。据此可以将首字母重新变为小写。

>>> def deCapitalize(string):
...     return string[0].lower() + string[1:]
...
>>> capitalize("Hello")
'hello'

字符串拼接

可以通过字符串的内置函数join将一个字符串加入到列表中的多个符串中

>>> date = ['2021','3','10']
>>> '-'.join(date)
'2021-3-10'

通过正则表达式统计字母个数

re为python中的正则表达式包,其中re.findall可将正则表达式所选中的内容挑出。在正则表达式中,方括号[]内部的字符彼此之间是“或”的关系。

据此,我们可以统计字符个数。例如我们希望统计元音字母[aeiou]的个数,可用如下方法

import re    	
def count_vowels(str): 
    return len(len(re.findall(r [aeiou] , str, re.IGNORECASE)))    	
count_vowels( foobar ) # 3    	
count_vowels( gym ) # 0	

变位词

如果两个单词中出现的字母相同,且每个字母出现的次数也相同,则这两个单词互为变位词(Anagram)。

collections中的Counter函数可以统计数据中的元素个数,其返回值为dict,可根据这个特性来对比两个字符串是否互为变位词

from collections import Counter   	
 	
def isAnagram(first, second):    	
    return Counter(first) == Counter(second)    	

计算字节大小

将字符串转化为utf-8编码后,其长度即为字节大小。

以下方法将以字节为单位返回字符串长度。

def byte_size(string):    	
    return(len(string.encode('utf-8')))   	
     	
byte_size("我爱你") # 9    	

字典操作

字典生成

dict函数可以通过列表生成字典,其要求为列表中的元素为[key,value]的形式。例如

>>> dict([[1,2],[4,5],[6,7]])
{1: 2, 4: 5, 6: 7}

那么对于两个列表keysvalues,可通过zip进行缝合,然后生成字典。

>>> keys = [1,2,3]
>>> values = [4,5,6]
>>> dict(zip(keys,values))
{1: 4, 2: 5, 3: 6}

键值对互换

根据列表生成字典的方法,可以快速实现字典键值对呼唤的操作。

>>> myDict = {"one":"1","two":"2"}
>>> dict(zip(myDict.values(),myDict.keys()))
{'1': 'one``2': 'two'}

字典合并

python中的dict数据内置函数update,可合并两个字典,这个过程会覆盖原有的key

>>> a = {"x" : 1,  "y" : 2}
>>> b = {"y" : 3,  "z" : 4}
>>> a.update(b)
>>> a
{'x': 1, 'y': 3, 'z': 4}

此外也可以用双星号索引进行合并。

字典实现case功能

import operator
def calc(a,b,flag):
    flags = {
        "add": operator.add,
        "sub": operator.sub,
        "truediv": operator.truediv,
        "mul": operator.mul,
    }
    return flags[flag](a,b)

>>> calc(1,2,'add')
3

系统调用

内存信息

  • 内存大小

sys中的getsizeof可以检查变量所占内存大小。

import sys
variable = 30
print(sys.getsizeof(variable)) # 24
  • 存储位置

id函数可以返回变量在内存中的位置。

>>> val = "abcde"
>>> id(val)
1803924712368

时间日期

记录程序运行时间

time.time()可以获取当前的系统时间,据此可以记录算法的运行时间。

import time	
tStart = time.time()
a = [n**2 for n in range(10000)]
tEnd = time.time()	
print(tStart-tEnd)

打印日历

python中的calendar可以提供日历。其中calendar(2021)以字符串的形式返回2021年的日历,calendar.month(2021,3)以字符串的形式返回2021年3月份的日历。而prmonth,prcal可以直接将日历打印出来,例如

import calendar
>>> calendar.prmonth(2021,3)
     March 2021
Mo Tu We Th Fr Sa Su
 1  2  3  4  5  6  7
 8  9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-06-14 22:33:54  更:2022-06-14 22:35:02 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/18 14:09:20-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码