1.将序列分解为单独的变量

1.1问题

包含n个元素的元组或列表、字符串、文件、迭代器、生成器,将它分解为n个变量

1.2方案

直接通过赋值操作

要求:变量个数要等于元素个数

当执行分解操作时,有时需要丢弃某些特定的值,通常选一个用不到的变量来赋值就可以了

其中_代表不用的变量

2.从任意长度的可迭代对象中分解元素

问题:需要从可迭代的对象中分解n个值,但可迭代对象可能超过n,这就会导致‘too many values to unpack’的异常

解决:*表达式

注意:*变量  输出的是列表

如果*变量   放在第一个位置,那么会将前len(n)-1个值赋给*变量,最后一个值赋给其他变量

2.保存最后n个元素

from collections import deque
#保存有限的历史记录,保存最新的n个元素,
#deque(maxlen=N)创建了一个固定长度的队列,当有新记录加入队列而队列已满,会自动移除最老的记录或元素
q=deque(maxlen=3)
q.append(1)
q.append(2)
q.append(3)
#队列已满
q.append(4)
q.append(5)
print(q)

3.找到最大和最小的n个元素 

3.1 n=1

max,min

3.2  n<<N  #要找的元素个数n 远远小于 元素总数N

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

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

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对列表进行筛选 

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.在两个字典中寻找相同点(集合的应用)

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种方法

方法一:

思路:使用集合,对原集合和新产生的最小值集合取差集,每次取差集的最小值,插入新集合的首位。

代码实现:

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,在循环中加判断,如果元素不是已经找过的最小值(已添加到新列表中),则执行找最小值的循环

代码实现:

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.本程序是根据列表元素的索引判断是否是已经找到的最小值

代码实现:

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)

方法四:

思路:方法四和方法三整体思路一致,是方法三的改进版。

代码实现:

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]的元素中的最小值。

代码实现:

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
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中列表和字典的高级应用的更多相关文章

  1. python中列表和字典常用方法和函数

    Python列表函数&方法 Python包含以下函数: 序号 函数 1 cmp(list1, list2)比较两个列表的元素 2 len(list)列表元素个数 3 max(list)返回列表 ...

  2. python中列表 元组 字典 集合的区别

    列表 元组 字典 集合的区别是python面试中最常见的一个问题.这个问题虽然很基础,但确实能反映出面试者的基础水平. (1)列表 什么是列表呢?我觉得列表就是我们日常生活中经常见到的清单.比如,统计 ...

  3. **python中列表 元组 字典 集合

    列表 元组 字典 集合的区别是python面试中最常见的一个问题.这个问题虽然很基础,但确实能反映出面试者的基础水平. 1.列表 列表是以方括号“[]”包围的数据集合,不同成员以“,”分隔. 列表的特 ...

  4. python 中列表 元组 字典 集合的区别

    先看图片解释 (1)列表 什么是列表呢?我觉得列表就是我们日常生活中经常见到的清单.比如,统计过去一周我们买过的东西,把这些东西列出来,就是清单.由于我们买一种东西可能不止一次,所以清单中是允许有重复 ...

  5. Python中列表,元组,字典,集合的区别

    参考文档https://blog.csdn.net/Yeoman92/article/details/56289287 理解Python中列表,元组,字典,集合的区别 列表,元组,字典,集合的区别是p ...

  6. python中列表和元组以及字符串的操作

    python中列表是非常好用的.不过有一些使用小细节还需要注意一下. tag[32:-4] 从index为32到tag的倒数第4个字符. 如果索引为32的值在倒数第4个字符的右边,那么将输出为空.只要 ...

  7. Python学习-列表元组字典操作

    一.列表 列表是Python的基本数据类型之一,它是以 [] 括起来的,内部成员用逗号隔开.里面可以存放各种数据类型. # 例如: list2 = ['jason', 2, (1, 3), ['war ...

  8. python中列表元素连接方法join用法实例

    python中列表元素连接方法join用法实例 这篇文章主要介绍了python中列表元素连接方法join用法,实例分析了Python中join方法的使用技巧,非常具有实用价值,分享给大家供大家参考. ...

  9. 对Python中列表和数组的赋值,浅拷贝和深拷贝的实例讲解

    引用:https://www.jb51.net/article/142775.htm 列表赋值: 1 2 3 4 5 6 7 >>> a = [1, 2, 3] >>&g ...

随机推荐

  1. Tuna项目总结

    从8.19—9.13日一共四周的时间,我在Tuna项目组进行的我的第一次正式工作,以及学习.在此,我对这个阶段的工作及学习进行一个总结,主要分为对流程的理解和对自动化测试的应用两个方面. 在总结着两点 ...

  2. HDOJ(HDU) 1860 统计字符

    Problem Description 统计一个给定字符串中指定的字符出现的次数 Input 测试输入包含若干测试用例,每个测试用例包含2行,第1行为一个长度不超过5的字符串,第2行为一个长度不超过8 ...

  3. 数组在C++和java中的区别

    几乎所有的程序设计语言都支持数组.在C和C++中使用数组是很危险的.因为C和C++中的数组就是内存块.如果一个程序要访问其自身内存块之外的数组,或者在数组初始化之前使用它,都会产生难以预料的后果. j ...

  4. 非常有利于seo的主题(红黄蓝绿)通用教程

    这篇教程是帮助刚使用Wordpres的朋友们的,免得自己弄得一头雾水.大江网络来教大家了解下如何设置自定义导航菜单. 一.首先进入后台,点击“外观”,选择“菜单”按钮,如下图: 然后看到右边界面中菜单 ...

  5. EMV/PBOC 解析(二) 卡片数据读取

    上一篇简单的了解了IC智能卡的文件结构和APDU报文,这篇我们直接来读取卡内的数据.下面我们主要参照<中国金融集成电路(IC)卡规范>. 好了废话不多说,下面贴指令: (1)卡片接收一个来 ...

  6. 【代码优化】equals深入理解

    覆盖equals时,遵守通用约定 对equal方法的覆盖看起来非常easy,可是有很多情况是容易导致错误,最好的避免这些错误的办法 就是不覆盖equals方法. 必须遵循的原则: 自反性--对于不论什 ...

  7. $.each 和$(selector).each()的差别

    Home » jQuery » $.each() $.each() Posted on 2012 年 3 月 15 日 in jQuery, jQuery函数 | by Jason | 译自官方手冊: ...

  8. Java 编程的动态性,第 5 部分: 动态转换类--转载

    在第 4 部分“ 用 Javassist 进行类转换”中,您学习了如何使用 Javassist 框架来转换编译器生成的 Java 类文件,同时写回修改过的类文件.这种类文件转换步骤对于做出持久变更是很 ...

  9. ios 中如何应对UIScrollView快速滑动(暴力用户,暴力测试)

    1.实现UIScrollViewDelegate 开始滑动: - (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView 滑动 ...

  10. 95秀-PullToRefreshListView 示例

        正在加载.暂无数据页面 public class RefreshGuideTool {     private RelativeLayout rl_loading_guide;//整个View ...