列表 元组 字典 集合的区别是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') <class 'tuple'>

(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}

**python中列表 元组 字典 集合的更多相关文章

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

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

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

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

  3. python的列表元组字典集合比较

    定义 方法 列表 可以包含不同类型的对象,可以增减元素,可以跟其他的列表结合或者把一个列表拆分,用[]来定义的 eg:aList=[123,'abc',4.56,['inner','list'],7- ...

  4. python3笔记十八:python列表元组字典集合文件操作

    一:学习内容 列表元组字典集合文件操作 二:列表元组字典集合文件操作 代码: import pickle  #数据持久性模块 #封装的方法def OptionData(data,path):    # ...

  5. python_列表——元组——字典——集合

    列表——元组——字典——集合: 列表: # 一:基本使用# 1.用途:存放多个值 # 定义方式:[]内以逗号为分隔多个元素,列表内元素无类型限制# l=['a','b','c'] #l=list([' ...

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

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

  7. python的学习笔记01_4基础数据类型列表 元组 字典 集合 其他其他(for,enumerate,range)

    列表 定义:[]内以逗号分隔,按照索引,存放各种数据类型,每个位置代表一个元素 特性: 1.可存放多个值 2.可修改指定索引位置对应的值,可变 3.按照从左到右的顺序定义列表元素,下标从0开始顺序访问 ...

  8. Python 列表&元组&字典&集合

    列表(list) 有序性,可存储任意类型的值 通过偏移存取,支持索引来读取元素,第一个索引为0 ,倒数第一个索引为-1 可变性 ,支持切片.合并.删除等操作 可通过索引来向指定位置插入元素 可通过po ...

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

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

随机推荐

  1. 使用ZooKeeper实现Java跨JVM的分布式锁(读写锁)

    一.使用ZooKeeper实现Java跨JVM的分布式锁 二.使用ZooKeeper实现Java跨JVM的分布式锁(优化构思) 三.使用ZooKeeper实现Java跨JVM的分布式锁(读写锁) 读写 ...

  2. 【git】常用命令大全

    Git常用操作命令收集: 1) 远程仓库相关命令 检出仓库:$ git clone git://github.com/jquery/jquery.git   后边接仓库文件地址 查看远程仓库:$ gi ...

  3. opencv:傅里叶变换

    示例代码: #include <opencv.hpp> #include <iostream> using namespace std; using namespace cv; ...

  4. 003——VUE操作元素属性

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  5. S2SH框架中的无刷新验证码功能实现

    暑假期间在实验室做使用S2SH框架的项目,其中登录和注册需要验证码,实现了一个没有实现刷新验证码功能的简单版本,代码如下: 1 package com.sem.action; 2 3 import j ...

  6. Friendly ARM linux交叉编译问题解决

    ARM-LINUX-GCC 安装参考:(笔记)Ubuntu下安装arm-linux-gcc-4.4.3.tar.gz (交叉编译环境) 然而安装完成之后运行 arm-linux-gcc -v (注意g ...

  7. DEV控件 皮肤问题

    今天用cnPack清理了下整个工程的引用单元,清理完,问题来了,TcxPageControl不透明了. 折腾了一会,找到原因,清理单元时将dxSkinscxPCPainter也清掉了,导致皮肤无法正常 ...

  8. 9.9 Python 文档字符串

    9.9 Python 文档字符串. 进入 Python 标准库所在的目录. 检查每个 .py 文件看是否有__doc__ 字符串, 如果有, 对其格式进行适当的整理归类. 你的程序执行完毕后, 应该会 ...

  9. echarts.js:1136 Uncaught Error: Initialize failed: invalid dom.

    一:错误描述:echarts.js:1136 Uncaught Error: Initialize failed: invalid dom. 二:错误原因:echarts在用json数据请求时未调用 ...

  10. 5,基于关系和超链接的 API

    Tutorial 5: Relationships & Hyperlinked APIs At the moment relationships within our API are repr ...