Python 数据结构及语法
Python 数据结构及语法
Python 数据结构及其接口方法
列表
- lst = []
- lst.sort() # 排序列表
- lst.reverse() # 反转列表
- lst.append() # 表尾添加元素
- lst.pop() # 表尾删除元素
- lst.extend(lst2) # 合并lst,lst2给lst
列表生成式 (List Comprehensions)
list1 = [1,2,3,4]
list2 = [i for i in list1 if i > 2]
print(list2)
list3 = [i for i in list1 if i%2]
print(list3)
dict1 = {x: x**2 for x in (2,4,6)}
print(dict1)
dict2 = {x : f'item{x **2}' for x in (2,4,6) } # formatted string literals, 以 f 开头,包含的{}表达式在程序运行时会被表达式的值代替。
print(dict2)
set1 = {x for x in 'hello world' if x not in 'abcdefg'}
print(len(set1))
字符串
s = 'abc' # 可以使用单引号和双引号表示字符串
ss = "abc"
str1 = 'hello, world!'
print('字符串长度是: ',len(str1)) # 字符串长度是: 13
print('单词首字母大写: ',str1.title()) # 单词首字母大写: Hello, World!
print('字符串变大写: ',str1.upper()) # 字符串变大写: HELLO, WORLD!
print('字符串是不是大写: ',str1.isupper()) # 字符串是不是大写: False
print('字符串是不是以hello开头: ',str1.startswith('hello')) # 字符串是不是以hello开头: True
print('字符串是不是以hello结尾: ',str1.endswith('hello')) # 字符串是不是以hello结尾: False
print('字符串是不是以感叹号开头: ',str1.startswith('!')) # 字符串是不是以感叹号开头: False
print('字符串是不是以感叹号结尾:', str1.endswith('!')) # 字符串是不是以感叹号结尾: True
str2 = '- abc'
str3 = str1.title() + ' ' + str2.lower()
print(str3) # Hello, World! - abc
元组
p = 'abcd', 'abcdef', 30, 'ddab@aaa' # p 的类型为 tuple
name, gender, age, email = p
集合
set1 = {1,2,3,3,3,2}
print(set1) # {1, 2, 3}
print('Length = ',len(set1)) # Length = 3
set2 = set(range(1,10))
print(set2) # {1, 2, 3, 4, 5, 6, 7, 8, 9}
set1.add(4)
set1.add(5)
set2.update([11,12])
print(set1) # {1, 2, 3, 4, 5}
print(set2) # {1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12}
#移除元素, 如果元素不存在将会引发 KeyError
set2.discard(5)
print(set2) # {1, 2, 3, 4, 6, 7, 8, 9, 11, 12}
if 4 in set2:
set2.remove(4)
print(set2) # {1, 2, 3, 6, 7, 8, 9, 11, 12}
for elem in set2:
print(elem**2,end=' ') # 1 4 9 36 49 64 81 121 144 1
#将元组转换成集合
set3 = set((1,2,3,3,2,1))
print(set3.pop()) #弹出头部元素 # 1
print(set3) # {2, 3}
#交集,并集,差集,对称差运算
print(set1 & set2) # {1, 2, 3}
#print(set1.intersection(set2))
print(set1 | set2) # {1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12}
#print(set1.union(set2))
print(set1 - set2) # {4, 5}
#print(set1.difference(set2))
print(set1 ^ set2) # {4, 5, 6, 7, 8, 9, 11, 12}
#print(set1.symmetric_difference(set2))
#判断子集和超集
print(set2 <= set1) # False
print(set3 <= set1) # True
print(set1 >= set2) # False
print(set1 >= set3) # True
字典
dict.setdefault
统计字符出现次数使用
s = 'abdfadfeass'
dic = {}
for e in s:
dic.setdefault(e, 0)
dic[e] += 1
print(dic)
Collections.defaultdict 类定义
class collections.defaultdict([default_factory[,....]])
Collections.defaultdict
from collections import defaultdict
s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]
d = defaultdict(list)
for k,v in s:
d[k].append(v)
print d.items()
- 使用 dict 定义字典,在访问不存在的 key 时会发生 keyerror 这样一个报错。
- 使用 defaultdict 任何未定的 key 都会默认返回一个根据 method_factory 参数不同的默认值,而相同情况下 dict() 会返回KeyError。
- 与使用 dict.setdefault() 相比更简洁更快。
将 default_factory 设置成 int 对于计数非常有用
from collections import defaultdict
s = 'mississippi'
d = defaultdict(int)
for k in s:
d[k]+=1
print d.items()
#[('i', 4), ('p', 2), ('s', 4), ('m', 1)]
将 default_factory 为 set 使defaultdict构建集合字典非常有用
from collections import defaultdict
s = [('red', 1), ('blue', 2), ('red', 3), ('blue', 4), ('red', 1), ('blue', 4)]
d = defaultdict(set)
for k,v in s:
d[k].add(v)
print d.items()
#[('blue', set([2, 4])), ('red', set([1, 3]))]
使用 Counter 进行字符统计
from collections import Counter
p = "abc"
print(Counter(p))
# Counter({'a': 1, 'b': 1, 'c': 1})
迭代数据结构
for i in xrange(n): pass # list
for k in dict_obj.iterkeys(): pass # dict keys
for v in dict_obj.itervalues(): pass # dict values
for k,v in dict_obj.iteritems(): pass # dict item
for index, value in enumerate(seq_obj): pass # seq
for v1, v2 in zip(seq1,seq2): pass # zip obj
Python 语法糖
- a, b = b, a #交换两个变量
- [i for i in range(10)] # 快速生成列表
- newstr = newstr[::-1] # 转置字符串
- numstr = str(n) # 将数字转换成字符串
- ''.join(strlst) # 使用''连接strlst里的字符
- max(arr, key = lambda x : len(str(x))) # 自定义比较函数
- asc = sorted(arr) # 升序排序
- desc = sorted(arr, reverse = True) # 降序排序
- elem = arr[-1] # 取最后一个元素
- with open('data.txt', 'w') as f : # 文件打开的语法糖,不用考虑关闭文件和异常
Python 语法
生成器
生成器是一种特殊的地带其,使用 yield 语句而不是 return 语句返回结果,yield 语句一次返回一个结果,在每个结果中间,挂起函数的状态,以便下次从它离开的地方继续执行。
def fib():
prev, curr = 0, 1
while True:
yield curr
curr, prev = prev + curr, curr
f = fib()
for i in range(10): # 调用10次next函数,并打印调用next()之后的结果
print(next(f)) # 调用next(f),fib()函数的返回执行到yield语句后返回.
迭代器
Iterator Protocal:
- iter()
- next()
- Exception of StopIteration
iter() 函数有两个参数时,第一个参数必须为可调用对象(callable object),这种情况下创建的迭代器在调用 next 时将会调用这个可调用对象,并返回它的值直到返回值与 iter 函数的第二个指定参数相等,然后抛出 StopIteration 异常。
使用 iter 可以直接返回 Python 中内建对象的迭代器。
it = iter([1, 2, 3, 4])
for x in it:
print(x)
装饰器
装饰器可以把与业务逻辑无关的代码抽离出来,让代码保持干净清爽,而且装饰器还能被多个地方重复利用。比如一个爬虫网页的函数,如果该URL曾经被爬过就直接从缓存中获取,否则爬下来之后加入到缓存,防止后续重复爬取。
不使用装饰器模式:
def web_lookup(url, saved={}):
if url in saved:
return saved[url]
page = urllib.urlopen(url).read()
saved[url] = page
return page
使用装饰器模式:
#pythonic
import urllib # py2
import urllib.request as urllib # py3
def cache(func):
saved = {}
def wrapper(url):
if url in saved:
return saved[url]
else:
page = func(url)
saved[url] = page
return page
return wrapper
def web_lookup(url): # 业务代码,抽出来。
return urllib.urlopen(url).read()
Python 数据结构及语法的更多相关文章
- Python数据结构与语法
字典:Python字典是另一种可变容器模型,且可存储任意类型对象,如字符串.数字.元组.字典等其他容器模型:值可以取任何数据类型,但键必须是不可变的,如字符串,数字或元组:遍历字典时遍历的是键:访问v ...
- 三. Python基础(3)--语法
三. Python基础(3)--语法 1. 字符串格式化的知识补充 tpl = "我是%s,年龄%d,学习进度100%" %('Arroz',18) print(tpl) # 会提 ...
- python语句和语法
python语句和语法 python程序结构: 1.程序由模块构成. 2.模块包含语句. 3.语句包含表达式. 4.表达式建立并处理对象. python的语法实质上是有语句和表达式组成的.表达式处理对 ...
- 从Python安装到语法基础,这才是初学者都能懂的爬虫教程
Python和PyCharm的安装:学会Python和PyCharm的安装方法 变量和字符串:学会使用变量和字符串的基本用法 函数与控制语句:学会Python循环.判断语句.循环语句和函数的使用 Py ...
- python 数据结构考题
1. 以下关于python数据结构说法正确的是 python中list可以动态的更新, 但是不容许嵌套 python中tuple可以动态更新, 但是不容许嵌套 python中dict保存键值对, 并且 ...
- python数据结构与算法
最近忙着准备各种笔试的东西,主要看什么数据结构啊,算法啦,balahbalah啊,以前一直就没看过这些,就挑了本简单的<啊哈算法>入门,不过里面的数据结构和算法都是用C语言写的,而自己对p ...
- python数据结构与算法——链表
具体的数据结构可以参考下面的这两篇博客: python 数据结构之单链表的实现: http://www.cnblogs.com/yupeng/p/3413763.html python 数据结构之双向 ...
- python数据结构之图的实现
python数据结构之图的实现,官方有一篇文章介绍,http://www.python.org/doc/essays/graphs.html 下面简要的介绍下: 比如有这么一张图: A -> B ...
- Python数据结构与算法--List和Dictionaries
Lists 当实现 list 的数据结构的时候Python 的设计者有很多的选择. 每一个选择都有可能影响着 list 操作执行的快慢. 当然他们也试图优化一些不常见的操作. 但是当权衡的时候,它们还 ...
- Python数据结构与算法--算法分析
在计算机科学中,算法分析(Analysis of algorithm)是分析执行一个给定算法需要消耗的计算资源数量(例如计算时间,存储器使用等)的过程.算法的效率或复杂度在理论上表示为一个函数.其定义 ...
随机推荐
- elasticsearch相关概念及常用操作汇总
背景 我本来是想把我的写的es的平时总结dsl发出来的,但是我发现只搞那个意义大不.干脆多写点吧. 索引的结构化和非结构 我们经常用数据库,当然会经常用到索引. 然后从索引的维度去分析,系统分为结构化 ...
- 苹果iPhone 日历查询功能异常
2022年底苹果发布了IOS16.2版本系统,此时间段内所有升级的用户都将会出现日历查询功能失效,字符错乱等诸多问题. 与客服沟通后告知,日历记录内容查询是没有时间限制的,可以无限期查询全部内容,于是 ...
- wsl安装和使用
1.安装wsl的版本 1.使用管理员身份打开powershell,执行 wsl --list --online 2.安装相应的版本 wsl --install -d Ubuntu-20.04 2.更改 ...
- 第八周作业-N67044-张铭扬
1. 完成ftp的mysql虚拟用户 数据库服务器:10.0.0.152 FTP服务器:10.0.0.156 #配置数据库服务器 [root@centos8 ~]# yum -y install ma ...
- fabric学习笔记11
fabric学习笔记10 20201303张奕博 2023.1.23 测试实践2 导入链码依赖包 package main import ( "github.com/hyperledger/ ...
- Swift async await 使用介绍
// // ViewController.swift // AsynWait // // Created by shengjie on 2022/2/9. // import UIKit class ...
- 【26期】如何判断一个对象是否存活?(或者GC对象的判定方法)?
这个问题,面试被问到的概率还是很大的.以下关于 如何判断一个对象是否存活 的回答,完全参照<深入理解Java虚拟机>一书,有需要的可以看书学习.以下是题目解析 判断对象是否存活的算法包括: ...
- java springboot+rabbitmq+websocket 订阅展示
记录工作 需要的依赖 <!--fastjson坐标--> <dependency> <groupId>com.alibaba</groupId> < ...
- linux 清空catalina.out日志 不需要重启tomcat(五种方法)
linux 清空catalina.out日志 不需要重启tomcat 1.重定向方法清空文件 [root@localhost logs]# du -h catalina.out 查看文件大小17 ...
- ubuntu下安装使用jupyter
sudo snap install jupyter安装,jupyter notebook使用,到浏览器访问服务URL这种使用方式不再赘述. 如何在服务端开启jupyter服务供客户端使用有待研究. 本 ...