python字典和列表的高级应用
1.将序列分解为单独的变量
1.1问题
包含n个元素的元组或列表、字符串、文件、迭代器、生成器,将它分解为n个变量
1.2方案
直接通过赋值操作
要求:变量个数要等于元素个数
当执行分解操作时,有时需要丢弃某些特定的值,通常选一个用不到的变量来赋值就可以了
其中_代表不用的变量
2.从任意长度的可迭代对象中分解元素
问题:需要从可迭代的对象中分解n个值,但可迭代对象可能超过n,这就会导致‘too many values to unpack’的异常
解决:*表达式
注意:*变量 输出的是列表
如果*变量 放在第一个位置,那么会将前len(n)-1个值赋给*变量,最后一个值赋给其他变量
2.保存最后n个元素
1
2
3
4
5
6
7
8
9
|
from collections import deque #保存有限的历史记录,保存最新的n个元素, #deque(maxlen=N)创建了一个固定长度的队列,当有新记录加入队列而队列已满,会自动移除最老的记录或元素 q = deque(maxlen = 3 ) q.append( 1 ) q.append( 2 ) q.append( 3 )<br> #队列已满 q.append( 4 ) q.append( 5 ) |
print(q)
3.找到最大和最小的n个元素
3.1 n=1
max,min
3.2 n<<N #要找的元素个数n 远远小于 元素总数N
1
2
3
4
5
6
|
import heapq nums = [ 1 , 8 , 2 , 23 , 7 , - 4 , 18 , 23 , 42 , 37 , 2 ] heapq.heapify(nums) #进行堆排序,并更新原列表 print (nums) #堆最重要的特性是nums[0]永远是最小的那个元素 print (heapq.heappop(nums)) #弹出最小的nums[0],并以第二小的元素取而代之 |
3.3 n<N #要找的元素个数n 相对小于 元素总数N
1
2
3
4
|
import heapq nums = [ 1 , 8 , 2 , 23 , 7 , - 4 , 18 , 23 , 42 , 37 , 2 ] print (heapq.nlargest( 3 ,nums)) print (heapq.nsmallest( 3 ,nums)) |
3.4 n<N #要找的元素个数n 几乎接近 元素总数N
1
2
3
4
5
|
import heapq nums = [ 1 , 8 , 2 , 23 , 7 , - 4 , 18 , 23 , 42 , 37 , 2 ] nums1 = sorted (nums)[: 7 ] #切出最小的7个元素 nums2 = sorted (nums)[ - 7 :] #切出最大的7个元素 print (nums1,nums2) |
4.根据列表中字典的key对列表进行筛选
1
2
3
4
5
6
7
8
9
10
11
12
13
|
import heapq p = [{ 'name' : 'ibm' , 'shares' : 100 , 'prices' : 91.11 }, { 'name' : 'apple' , 'shares' : 50 , 'prices' : 543.31 }, { 'name' : 't' , 'shares' : 150 , 'prices' : 21.51 }, { 'name' : 'mi' , 'shares' : 30 , 'prices' : 441.16 }, { 'name' : '360' , 'shares' : 10 , 'prices' : 61.81 }, { 'name' : 'car' , 'shares' : 80 , 'prices' : 221.51 } ] #s:要排序的元素 #s['prices']以元素的key=['prices']进行排序 cheap = heapq.nsmallest( 3 ,p,key = lambda s:s[ 'prices' ]) expensive = heapq.nlargest( 3 ,p,key = lambda s:s[ 'prices' ]) print (cheap, '\n' ,expensive) |
5.在两个字典中寻找相同点(集合的应用)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
a = { 'x' : 1 , 'y' : 2 , 'z' : 3 } b = { 'w' : 10 , 'x' : 11 , 'y' : 2 } #find keys in common c = a.keys()& b.keys() print (c) #find keys in a that are not in b d = a.keys() - b.keys() print (d) #find keys,values in common e = a.items()& b.items() print (e) |
6.不排序且不改变原列表,实现列表有序5种方法
方法一:
思路:使用集合,对原集合和新产生的最小值集合取差集,每次取差集的最小值,插入新集合的首位。
代码实现:
1
2
3
4
5
6
7
|
l1 = [ 99 , 999 , - 5 , - 66 , - 25 , 663 , 3 ] l2 = [] #存每次找到的最小值 for i in range ( len (l1)): a = set (l1) - ( set (l1)& set (l2)) l2.insert( 0 , min (a)) l2 = list (l2) print (l2) |
方法二:
思路:1.最小值寻找思路:首先找出最大值,并赋值给最小值变量,循环列表的每个元素,当有元素小于当前最小变量,则把该元素重新赋值给最小变量,这样就得到了一个列表的最小值。
2.整体思路:将最小值插入到新列表,重复1,在循环中加判断,如果元素不是已经找过的最小值(已添加到新列表中),则执行找最小值的循环
代码实现:
1
2
3
4
5
6
7
8
9
10
|
li1 = [ 1 , 3 , 66 , 5 , 4 , - 1 , - 100 , 54 ] li2 = [] for j in range ( len (li1)): m = max (li1) for i in li1: if i not in li2: if i <m: m = i li2.insert( 0 ,m) print (li2) |
方法三:
思路:1.寻找最小值,让最小值变量等于列表的第一个元素(且不是已经找到的最小值,即不属于列表l2,如果属于列表l2,则跳过该元素),循环整个列表,
如果有元素(该元素也不能是已找到的最小值,如果是,则跳过)小于当前最小值,则把该元素赋值给最小值。
2.本程序是根据列表元素的索引判断是否是已经找到的最小值
代码实现:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
def tiaoguo(s): #跳过已找过的索引 if s in l3: return 'y' l1 = [ 99 , 999 , - 5 , - 66 , - 25 , 663 , 3 ] l2 = [] #存每次找到的最小值 l3 = [] #存已使用的索引 c = l1[ 0 ] # for j in range ( len (l1)): for i in range ( len (l1) - j): if len (l2) = = len (l1): break if tiaoguo(i) = = 'y' : #遇到已经找过的最小值,进行跳过处理 continue if c>l1[i]: c = l1[i] l2.insert( 0 ,c) l3.append(l1.index(c)) #把最小值的索引存在l3中 for k in range ( len (l1)): #更新最小值 if tiaoguo(k) = = 'y' : continue else : c = l1[k] print (l2) |
方法四:
思路:方法四和方法三整体思路一致,是方法三的改进版。
代码实现:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
def list_sort(l1): l2 = [] the_num = [] while ( len (l1)> len (the_num)): temp = max (l1) #避免了方法三中首次给最小值变量赋值可能出现该值是已经找到的最小值的情况,因为max(l1)只有最后一次才会出现在l2中 for i in range ( len (l1)): if i in the_num: # 如果是已经找到的最小值的索引,则continue continue if l1[i] < = temp: temp = l1[i] num = i the_num.append(num) l2.insert( 0 ,temp) return l2 if __name__ = = '__main__' : l1 = [ 1 , 3 , 66 , 5 , 4 , - 1 , - 100 , 54 ] result = list_sort(l1) print (result) |
方法五:
思路:本程序是根据下一次寻找的最小值是大于上一次寻找的最小值(列表lis2[0]),且是所有大于lis2[0]的元素中的最小值。
代码实现:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
def sour(lis1, lis2): xia = lis2[ 0 ] for i in range ( len (lis1)): if lis2[ 0 ] < lis1[i]: xia = lis1[i] # 所有大于list[0]的数 for j in range ( len (lis1)): if lis1[j] > lis2[ 0 ] and lis1[j] < xia: # 找到大于lis2[0]最小的数 xia = lis1[j] return xia<br> lis1 = [ 3 , 44 , 55 , 2 , 45 , 98 , 99 , - 1 , - 4 , 0 , - 98 , - 65 ] lis2 = [] lis2.append( min (lis1)) for i in range ( len (lis1) - 1 ): lis2.insert( 0 , sour(lis1, lis2)) print (lis2) |
python字典和列表的高级应用的更多相关文章
- python 字典和列表嵌套用法
python中字典和列表的使用,在数据处理中应该是最常用的,这两个熟练后基本可以应付大部分场景了.不过网上的基础教程只告诉你列表.字典是什么,如何使用,很少做组合说明. 刚好工作中采集promethe ...
- python 字典,列表,集合,字符串,基础进阶
python列表基础 首先当然是要说基础啦 列表list 1.L.append(object) -> None 在列表末尾添加单个元素,任何类型都可以,包括列表或元组等 2.L.extend(i ...
- Python 字典和列表的对比应用
Q:将下列格式的txt文件,打印出该选手的3个最快跑步时间 james2.txt =>“James Lee,2002-3-14,2-34,3:21,2.34,2.45,3.01,2:01,2:0 ...
- python 字典、列表、字符串 之间的转换
1.列表与字符串转换 1)列表转字符串: 将列表中的内容拼接成一个字符串 将列表中的值转成字符串 2)字符串转列表: 用eval转换 将字符串每个字符转成列表中的值 将字符串按分割成列表 2.列表与字 ...
- python字典和列表使用
一.字典中健值为列表或字典 1 a.setdefault(key,[]).append(b)--键值是列表 2 a.setdefault(key,{}).append(b)--键值是字典 二.键值为列 ...
- python字典推导&&列表推导&&输出随机数
字典推导: x = ['A', 'B', 'C', 'D'] y = ['Alice', 'Bob', 'Cecil', 'David'] print({i:j for i,j in zip(x,y) ...
- python字典和列表使用的要点
dicts = {} lists = [] dicts['name'] = 'zhangsan' lists.append(dicts) 这时候lists的内容应该是[{'name': 'zhangs ...
- python字典中列表追加数据
dict = {} for i in range(1, 6): if i not in dict: dict[i] = [] for j in range(101, 106): dict[i].app ...
- python字典里面列表排序
#coding=utf8 #获取到的数据库ip,和负载数据,需要按照负载情况排序 a={u'1.8.1.14': [379, 368, 361, 358, 1363], u'9.2.4.3': [42 ...
随机推荐
- 网站项目所有js css无法引用问题解决方案
网站页面中的所有js css引用失效,路径确保正确,但是浏览器就是报找不到引用.仔细查找发现问题所在: 报错信息很详细了,就是.NET Framework 版本不同导致.同时也提供了两个解决方案:将. ...
- 为 10000+ 业务系统提供数据可视化能力的 AntV 又进化了
小蚂蚁说: 2018 年 AntV 品牌日以知新.知心为主题,旨在让产品一直「知新」,与用户一直「知心」.AntV 是蚂蚁金服全新一代数据可视化解决方案,致力于提供一套简单方便.专业可靠.无限可能的数 ...
- django序列化 serializers
Django的序列化工具让你可以将Django的模型‘翻译’成其它格式的数据.通常情况下,这种其它格式的数据是基于文本的,并且用于数据交换\传输过程. 一.序列化数据 Django为我们提供了一个强大 ...
- java.io.FileNotFoundException异常,一是“拒绝访问”,二是“系统找不到指定路径”
关于java.io.FileNotFoundException异常 因为这个异常抛出俩种情况:一是“拒绝访问”,二是“系统找不到指定路径” 这里只讲明什么时候抛拒绝访问,什么时候抛找不到指定路径. 原 ...
- 使用@JsonFormat引起的时间比正常时间慢8小时解决方法
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
- Vue.use源码分析
我想有过vue开发经验的,对于vue.use并不陌生.当使用vue-resource或vue-router等全局组件时,必须通过Vue.use方法引入,才起作用.那么vue.use在组件引入之前到底做 ...
- 第 5 章 网络 - 031 - none和host网络的适用场景
none和host网络的适用场景 Docker 安装时会自动在 host 上创建三个网络,用 docker network ls 命令查看: root@ubuntu:~# docker network ...
- SpringCloud 之 Hystrix熔断器
Hystrix Hystrix请求熔断与服务降级 Hystrix线程隔离&请求缓存&请求合并
- learn the python the hard way习题11~17总结
关于 input() 格式: input("prompt")功能:从 CLI 获取 User 的一个输入,显示 promt 的内容,并且返回一个 string 类型的数值其他:如果 ...
- Vue Authentication And Route Handling Using Vue-router(详解)
英文原文 (本文原出处),本博在原文的基础上,进一步分析代码的结构和解释代码. git 代码 创建一个app: vue-router-auth 本文详解了如何使用vue-router建立路由记录对 ...