技术标签: python集合中的元素可以是元组 也可以是列表
列表 元组 字典 集合的区别是python面试中最常见的一个问题。这个问题虽然很基础,但确实能反映出面试者的基础水平。
1.列表
列表是以方括号“[]”包围的数据集合,不同成员以“,”分隔。
列表的特点:有序,数据可变,数据可重复,数据类型可不同,可嵌套。
创建一个列表:tl = [1, 'Hello', 1, "你好", [2, 'World']]
初步可以看到它的语法、数据可重复、数据类型可不同、可嵌套等特点,如果用print函数多输出几次就会发现它是有序的,下面我们看一下列表的常用操作,同时也证明列表数据可变。
(1)list.append()追加成员,添加到末尾
tl = [1, 'Hello', 1, "你好", [2, 'World']]
print(tl)
tl.append('test')
print(tl)
输出:
[1, 'Hello', 1, '你好', [2, 'World']]
[1, 'Hello', 1, '你好', [2, 'World'], 'test']
(2)list.pop(i)删除第i个成员,并可将删除的数据赋值给变量
tl = [1, 'Hello', 1, "你好", [2, 'World']]
print(tl)
a = tl.pop(3)
print(tl)
print(a)
输出:
[1, 'Hello', 1, '你好', [2, 'World']]
[1, 'Hello', 1, [2, 'World']]
你好
(3)list.remove(s)直接删除值为s的成员,如果该值有多个只删除第一个,注意与pop的区别
tl = [1, 'Hello', 1, "你好", [2, 'World']]
print(tl)
tl.remove("你好")
print(tl)
输出:
[1, 'Hello', 1, '你好', [2, 'World']]
[1, 'Hello', 1, [2, 'World']]
(4)list.index(x)获得参数x在列表中的位置
tl = [1, 'Hello', 1, "你好", [2, 'World']]
print(tl.index([2, 'World']))
输出:
4
(5)list.insert(a,b)向列表中的a位置插入数据b
tl = [1, 'Hello', 1, "你好", [2, 'World']]
tl.insert(2, '位置二')
print(tl)
输出:
[1, 'Hello', '位置二', 1, '你好', [2, 'World']]
(6)list.copy()拷贝列表,两者互相独立
tx = [1, 'Hello', 1, "你好", [2, 'World']]
ty = tx.copy()
print(tx)
print(ty)
tx.pop(4)
print(tx)
print(ty)
输出:
[1, 'Hello', 1, '你好', [2, 'World']]
[1, 'Hello', 1, '你好', [2, 'World']]
[1, 'Hello', 1, '你好']
[1, 'Hello', 1, '你好', [2, 'World']]
(7)list.extend(L)向列表中追加另一个列表L
tx = [1, 'Hello', 1, "你好", [2, 'World']]
ty = [9, 8, 7, 6]
tx.extend(ty)
print(tx)
输出:
[1, 'Hello', 1, '你好', [2, 'World'], 9, 8, 7, 6]
(8)list.count(y)计算列表中参数y出现的次数,想知道列表长度可以用len(L)
ty = [9, 8, 7, 6, 8]
print(ty.count(8))
输出:
2
(9)list.sort()将列表中的成员排序,前提是成员数据类型一致
tx = ['1', 'Hello', '1', "你好"]
ty = [9, 8, 7, 6, 8]
ty.sort()
print(ty)
tx.sort()
print(tx)
输出:
[6, 7, 8, 8, 9]
['1', '1', 'Hello', '你好']
(10)list.reverse()将列表中成员的顺序颠倒
(11)list.clear()将列表清空
2.元组
元组是以圆括号“()”包围的数据集合,不同成员以“,”分隔。
元组的特点:有序,数据不可变,数据可重复,数据类型可不同,可嵌套。元组通常在需要一组安全稳定的值的时候使用。
元组和列表的区别除了语法就只有一个:数据不可变,也正是这个特点导致元组没有操作数据的方法,比列表要掌握的东西少得多。
(1)tuple.index(x)获得参数x在列表中的位置
(2)tuple.count(y)计算列表中参数y出现的次数
3.字典
字典是以大括号“{}”包围的数据集合,成员内部用“:”分隔,不同成员以“,”分隔。
元组的特点:无序,数据可变,键不可重复,数据类型可不同,可嵌套。通过键来访问成员。
创建一个字典:td = {'k': 'v', 'g': 'd'},下面我们看一下字典的常用操作:
(1)dict.get('k') 获取键为'k'的值
(2)dict.copy() 拷贝字典,两者互相独立
(3)dict.pop('k') 删除键为'k'的值,并可将删除的值赋值给变量
(4)dict.popitem() 随机删除一对键值,并可将删除的键值赋给变量,注意此时变量的类型将变成元组
td = {'k': 'v', 'g': 'd'}
print(td)
x = td.popitem()
print(td)
print(x, type(x))
输出:
{'g': 'd', 'k': 'v'}
{'k': 'v'}
('g', 'd')
(5)dict.values() 获取字典中所有的“值”
td = {'k': 'v', 'g': 'd'}
print(td)
x = td.values()
for i in x:
print(i)
输出:
{'g': 'd', 'k': 'v'}
d
v
(6)dict.keys() 获取字典中所有的“键”
(7)dict.items() 获取字典的所有键值对,以元组返回
td = {'k': 'v', 'g': 'd'}
print(td)
x = td.items()
for i in x:
print(i)
输出:
{'g': 'd', 'k': 'v'}
('g', 'd')
('k', 'v')
(8)dict.fromkeys(seq[,value])) 用于创建一个新字典,以序列seq中元素做字典的键,value为字典所有键对应的初始值。
a = ('d', 'g', 's')
b = {}
b = b.fromkeys(a, 'test')
print(a, b)
td = {'k': 'v', 'g': 'd'}
print(td)
x = td.fromkeys('k')
print(x)
y = td.fromkeys(td.values(), 1000)
print(y)
输出:
('d', 'g', 's') {'s': 'test', 'd': 'test', 'g': 'test'}
{'g': 'd', 'k': 'v'}
{'k': None}
{'v': 1000, 'd': 1000}
(9)dict.setdefault('k','v') 和get()方法类似, 如果键不存在于字典中,将会添加键并将值设为默认值。
dict = {'Name': 'Zara', 'Age': 7}
print("Value : %s" % dict.setdefault('Age', 10))
print("Value : %s" % dict.setdefault('Sex', 'f'))
print(dict)
输出:
Value : 7
Value : f
{'Name': 'Zara', 'Sex': 'f', 'Age': 7}
(10)dict.update(dict2) 函数把字典dict2的键/值对更新到dict里,即dict2中的成员是一定会保留的。
dict1 = {'Name': 'Zara', 'Age': 7}
dict2 = {'Sex': 'female', 'Age': 11}
dict1.update(dict2)
print("Value : %s" % dict1)
输出:
Value : {'Sex': 'female', 'Age': 11, 'Name': 'Zara'}
(11)dict.clear() 清空
4.集合
集合的特点:无序,数据可变,数据不可重复,数据类型可不同,不可嵌套。集合最好的应用是去重和关系操作(交集、并集等)。集合没有特殊的表示方法,而是通过一个set函数转换成集合。
创建一个字典:t = set("Hello"):
a = set('asdsf')
b = set([8, 5, 7,'xx', 10, 'asdf'])
print(a)
print(b)
输出:
{'d', 's', 'f', 'a'}
{'xx', 5, 7, 8, 10, 'asdf'}
可以看到将一个字符串转换为集合,会把字符串每个字符分开,最终成为一个集合。
下面我们看一下字典的常用操作:
(1)set.add(x) 添加x元素到集合。
a = set(['asdsf', 10])
a.add('iis')
print(a)
输出:
{'iis', 'asdsf', 10}
(2)set.remove(y) 删除集合中的y元素,如果y不存在会报错
a = set(['asdsf', 10])
a.remove('asdsf')
print(a)
输出:
{10}
(3)set.discard(x) 删除集合中的x元素,如果x不存在,不会报错,注意和remove的区别
b = set([8, 5, 7,'xx', 10, 'asdf'])
b.discard(9)
print(b)
输出:
{5, 7, 8, 10, 'asdf', 'xx'}
(4)set.pop() 随机删除一个集合元素,可将删除的元素赋值给变量
a = set(['asdsf', 10])
x = a.pop()
print(a)
print(x)
输出: #注意:删除是随机的,多执行几次结果会有变化
{'asdsf'}
10
(5)set.copy() 拷贝一个集合
a = set(['asdsf', 10])
x = a.copy()
print(a)
print(x)
a.remove(10)
print(a, x)
x.remove('asdsf')
print(a, x)
输出:
{10, 'asdsf'}
{10, 'asdsf'}
{'asdsf'} {10, 'asdsf'}
{'asdsf'} {10}
可见,对两个集合的操作互不影响
(6)set.union()和set.update() 将两个集合取并集,这两个方法效果一样,但是union字面意思好理解一些。
b = set([8, 5, 7,'xx', 10, 'asdf'])
a = ['kk','vv']
b.update(a)
print(b)
b.union(a)
print(b)
输出:
{'asdf', 5, 7, 8, 10, 'vv', 'xx', 'kk'}
{'asdf', 5, 7, 8, 10, 'vv', 'xx', 'kk'}
(7)set.intersection() 将两个集合取交集。
s = set([3, 5, 9,'asdsf', 10, 'asdf'])
b = set([8, 5, 7,'xx', 10, 'asdf'])
xx = b.intersection(s)
print(xx)
输出:
{10, 'asdf', 5}
(8)b.intersection_update(s) 将两个集合取交集,并将所取的交集覆盖到集合b中
s = set([3, 5, 9,'asdsf', 10, 'asdf'])
b = set([8, 5, 7,'xx', 10, 'asdf'])
b.intersection_update(s)
print(b)
输出:
{10, 'asdf', 5}
(9)yy = b.difference(s) 将b中存在但s中不存在的元素放到集合yy中
s = set([3, 5, 9,'asdsf', 10, 'asdf'])
b = set([8, 5, 7,'xx', 10, 'asdf'])
yy = b.difference(s)
print(yy)
输出:
{8, 'xx', 7}
(10)b.difference_update(s) 将b中存在但s中不存在的元素覆盖到集合b中
s = set([3, 5, 9,'asdsf', 10, 'asdf'])
b = set([8, 5, 7,'xx', 10, 'asdf'])
b.difference_update(s)
print(b)
输出:
{'xx', 7, 8}
(11)b.issunset(s) 判断b是不是s的子集
s = set([3, 5, 9,'asdsf', 10, 'asdf'])
b = set([5, 10, 'asdf'])
x = b.issubset(s)
y = s.issubset(b)
print(x)
print(y)
输出:
True
False
(12)set.issuperset() 和上一个相反,判断超集
(13)x = s.isdisjoint(b) 判断s和b没有交集,没有返回True,有返回False。
s = set([3, 5, 9,'asdsf', 10, 'asdf'])
b = set([6, 10, 'asdf'])
c = set([6, 8, 0])
x = s.isdisjoint(b)
y = s.isdisjoint(c)
print(x)
print(y)
输出:
False
True
(14)x = s.symmetric_difference(b) 将s和b两个集合的非重复项合并为一个新的集合。
s = set([3, 5, 9,'asdsf', 10, 'asdf'])
b = set([6, 10, 'asdf'])
x = s.symmetric_difference(b)
print(x)
输出:
{3, 5, 6, 'asdsf', 9}
(15)s.symmetric_difference_update(b) 将s和b两个集合的非重复项合并为一个新的集合并赋值给s。
s = set([3, 5, 9,'asdsf', 10, 'asdf'])
b = set([6, 10, 'asdf'])
s.symmetric_difference_update(b)
print(s)
输出:
{3, 5, 6, 'asdsf', 9}
文章浏览阅读232次。 After finishing a project on a boost converter, I actually think that there is something I can do better. Let me introduce you to my progress, at the moment to hardware extent by a function gen...
文章浏览阅读3k次。在/system下的build.prop文件里,我们常看见以下语句。ro.ril.hsdpa.category = 10ro.ril.hsupa.category = 6ro.ril.hsxpa = 2ro.ril.enable.amr.wideband=1wifi.supplicant_scan_interval=45dalvik.vm.heapsize=24m _op system/system/build.prop cp: error writing 'system/system/build.prop': no
文章浏览阅读600次。在我们用C/C++开 发的过程中,总是有一个问题会给我们带来苦恼。这个问题就是函数内和函数外代码需要通过一块内存来交互(比如,函数返回字符串),这个问题困扰和很多开发 人员。如果你的内存是在函数内栈上分配的,那么这个内存会随着函数的返回而被弹栈释放,所以,你一定要返回一块函数外部还有效的内存。这 是一个让无数人困扰的问题。如果你一不小心,你就很有可能在这个上面犯错误。当然目前有很多解决_inet_ntoa 释放
文章浏览阅读580次。#include typedef enum _SYSTEM_INFORMATION_CLASS { SystemBasicInformation, SystemProcessorInformation, SystemPerformanceInformation, SystemTimeOfDayInformation, Syst_zwduplicateobject系统进程
文章浏览阅读118次。JVM的垃圾收集器经历了多代的发展,从单线程收集器到多线程收集器。一、背景垃圾回收器经历过多代的发展,从单线程到多线程,垃圾收集器的大家族产品如下,每一个连线表示可以组合使用。接下来大概分为几个阶段详细介绍下各个垃圾回收器的特点:阶段收集器名称区域并行/串行/并发算法优缺点适用场景第一阶段Serial新生代串行复制响应速度快单CPU环境下的Client模式Serial Old老年代串行标志-整理响应速度快单CPU环境下的Client._从整体来看是基于“标记--整理”算法实现的收集器;从局部上来看是基于“复制”
文章浏览阅读1.7w次,点赞19次,收藏92次。一、课时目标1.理解shell的概念2.理解交互式shell和非交互式shell的区别3.掌握反弹shell的原理和方法_反弹shell
文章浏览阅读4.7w次,点赞17次,收藏73次。常用的分析管理工具方法常用的分析管理工具方法二八原则SWOT分析法鱼骨图分析法5M因素分析法5M1E分析法头脑风暴法名义群体法德尔菲法电子会议分析法几种决策方法比较PDCA循环5W1H分析法5W2H分析法5W2H1E法SMART原则任务分解法OGSM计划法_阿波罗根本原因分析
文章浏览阅读502次。操作系统和微机接口技术的课程设计星期三班委才说,下周三就要叫答辩!!!!这几周还要连着期末考试.一点时间都没有!!操作系统的做了,微机接口技术的实在没有.2、掌握运用Matlab软件分析连续时间信号与系统的时域、频域特性;3、通过。二、实验内容1、构建一个包含若干个不同频率分量的周期连续信号(各分量频率自定)f(t),截取该信号的不同长度(注意截取长度应不小于最低频率分量的一个周期).n=0:15..._构建一个包含若干个不同频率分量的周期连续信号(各分量频率自定)f(t),截取该信号
文章浏览阅读6.5k次。Fastjson漏洞修复参考1. 漏洞背景 Fastjson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。Fastjson多处补丁修补出现纰漏,Fastjson在1.2.68版本以下,无需Autotype开启,或者可绕过autoType限制,攻击者即可通过精心构造的请求包在使用Fastjson的服务器上进行远程代码执行。受影响的版本:fastjson <=1.2.68fas_fastjson漏洞修复
文章浏览阅读394次,点赞2次,收藏3次。C++ 向量 vector 是一种对象实体, 能够容纳许多其他类型相同的元素, 因此又被称为容器。 与string相同, vector 同属于STL(Standard Template Library, 标准模板库)中的一种自定义的数据类型, 可以广义上认为是数组的增强版。_vector::iterator it = m_vec.begin()
文章浏览阅读195次。Java学习路线&笔记链接????JAVASE数据库mysql(或oracle)JDBCWEB前端HTMLCSSJavaScriptJavaWeb(web后端)ServletJSPweb进阶AJAXjQueryJavaWeb项目实战SSM三大框架(额外可选学SSH)MyBatisSpringSpringMVC互联网分布式JAVASEJava语言的基础,是Java的最基本的库。基础语法加常用类库。数据库mysql(或oracle)数据库是所有程序员都需要学习的,因为不管是C语言,还是C++,_java 学习连
文章浏览阅读358次。 ESD05V56T-2L的参数: 封装:SOT-563 电压:5V 钳位电压:9.8V 容值:3pF 功率:100W ESD05V56T-2L的特性: 1、依据(tp=8/20μs)线路,峰值脉冲功率为100W 2、保护两个I/O线及电源线 3、适合高速接口的低电容 4、工作电压:5V 5、超小型封装要求小于2.9mm2的PCB面积 6、IEEE1394高速火线端口 6、IEC61000-4-2(ESD)±15_esd二极管容值