Python学习----4 列表、元组、字典和集合

Python序列是指按特定顺序依次排列的一组数据,包括列表(list),元组(tuple),字典(dict),集合(set).

其中,list和tuple是按顺序保存元素,所有元素占用一块连续的内存,可以通过索引来访问,类似于C语言的数组。list和tuple的区别是list可以修改,后者不行。

dict和set存储的数据都是无序的,dict元素以key-value的形式保存。

序列索引

类似于C语言的数组下标,但是Python有负数,从右向左计数,即最后一个元素为-1。

//支持中文 
str="测试数据"
print("str[-2]","==",str[-2])
print("str[3]","==",str[3])

//输出结果
str[-2] == 数
str[3] == 据

序列切片

序列实现切片操作的语法格式如下:

sname[start : end : step]

其中,各个参数的含义分别是:

  • sname:表示序列的名称;
  • start:表示切片的开始索引位置(包括该位置),此参数也可以不指定,会默认为 0,也就是从序列的开头进行切片;
  • end:表示切片的结束索引位置(不包括该位置),如果不指定,则默认为序列的长度;
  • step:表示在切片过程中,隔几个存储位置(包含当前位置)取一次元素,也就是说,如果 step 的值大于 1,则在进行切片去序列元素时,会“跳跃式”的取元素。如果省略设置 step 的值,则最后一个冒号就可以省略。

序列相加

 使用“+”

序列相乘

使用数字 n 乘以一个序列会生成新的序列,其内容为原来序列被重复 n 次的结果

in/not in-检查是否包含元素

序列相关内置函数

函数功能
len()计算序列的长度,即返回序列中包含多少个元素。
max()找出序列中的最大元素。注意,对序列使用 sum() 函数时,做加和操作的必须都是数字,不能是字符或字符串,否则该函数将抛出异常,因为解释器无法判定是要做连接操作(+ 运算符可以连接两个序列),还是做加和操作。
min()找出序列中的最小元素。
list()将序列转换为列表。
str()将序列转换为字符串。
sum()计算元素和。
sorted()对元素进行排序。
reversed()反向序列中的元素。
enumerate()将序列组合为一个索引序列,多用在 for 循环中。

list

  • 创建
    1.使用[]创建列表
    如 list_a=[2,4,5,6,7,8]
    2.使用list()函数创建列表
    可以将字符串、元组、字典、区间转换成列表
    如 list_b = list("hello world")
    
    
  • 访问
    1、直接用索引,类似于C语言的数组
    比如list_a[2]
    2、使用切片访问
    比如print(list_a[2:5:1]) #第2到第5,步长为1
  • 删除

    del 列表名
    如 del list_a
    
    
  • 添加

    1、append()
    比如 list_a.append(7)
    2、extend() 它和append()的区别:extend() 不会把列表或者元祖视为一个整体,而是把它们包含的元素逐个添加到列表中。
    3、insert(index,obj) 与上述2个方法不同的是,insert()可以插入到指定位置
    如 list_a.insert(2,100)
    
    
  • 删除元素

     
    1、删除单个元素
    del list_a[index]
    2、删除连续元素,从start到end,不包括end
    del list+_a[start:end]
    3、pop(index) 删除索引处元素,缺省时为最后一个元素
    list_a.pop(index)
    4、remove(val) 删除指定元素,只匹配一次
    5、clear() 删除列表里的所有元素
    
  • 修改元素

    1、修改单个元素,直接赋值
    如 list_a[2] = 55
    2、修改连续元素,使用切片方式
    如 list_a[1:4] =[40,50,60,70]
  • 查找元素

    1、index()方法,格式如下:
    listname.index(obj, start, end)
    start 和 end 参数用来指定检索范围:
    start 和 end 可以都不写,此时会检索整个列表;
    如果只写 start 不写 end,那么表示检索从 start 到末尾的元素;
    如果 start 和 end 都写,那么表示检索 start 和 end 之间的元素。
    2、count()方法,统计某个元素在列表中出现的次数
    listname.count(obj)

tuple 元组

tuple与list的区别在于,list创建完成后元素可以修改,tuple创建完成后不能修改,可以把tuple看成不可变的list。

  • 创建
    1、使用()创建
    如 tuple_a = (1,2,3,4,6)
    当元组中只有一个元素时,该元素后面必须加逗号,如tuple_b=("teststring",)
    2、使用tuple()函数创建,tuple(data)
    如 
    #将字符串转换成元组
    tup1 = tuple("hello")
    print(tup1)
    #将列表转换成元组
    list1 = ['Python', 'Java', 'C++', 'JavaScript']
    tup2 = tuple(list1)
    print(tup2)
    #将字典转换成元组
    dict1 = {'a':100, 'b':42, 'c':9}
    tup3 = tuple(dict1)
    print(tup3)
    #将区间转换成元组
    range1 = range(1, 6)
    tup4 = tuple(range1)
    print(tup4)
    #创建空元组
    print(tuple())

  • 访问
    使用索引和切片方式,和list一致

  • 修改--不支持,只能重新赋值
  • 删除 del tuplename

dict

类似于C++的map

主要特征解释
通过键而不是通过索引来读取元素字典类型有时也称为关联数组或者散列表(hash)。它是通过键将一系列的值联系起来的,这样就可以通过键从字典中获取指定项,但不能通过索引来获取。
字典是任意数据类型的无序集合和列表、元组不同,通常会将索引值 0 对应的元素称为第一个元素,而字典中的元素是无序的。
字典是可变的,并且可以任意嵌套字典可以在原处增长或者缩短(无需生成一个副本),并且它支持任意深度的嵌套,即字典存储的值也可以是列表或其它的字典。
字典中的键必须唯一字典中,不支持同一个键出现多次,否则只会保留最后一个键值对。
字典中的键必须不可变字典中每个键值对的键是不可变的,只能使用数字、字符串或者元组,不能使用列表。
  • 创建
    1、使用{}创建,包含key和value,之间用:分隔
    如 dict_a={'key1':'val1','key2':'val2'}
    #使用字符串作为key
    scores = {'数学': 95, '英语': 92, '语文': 84}
    print(scores)
    #使用元组和数字作为key
    dict1 = {(20, 30): 'great', 30: [1,2,3]}
    print(dict1)
    #创建空元组
    dict2 = {}
    print(dict2)
    2、通过fromkeys()方法创建字典dictname = dict.fromkeys(list,value=None)
    knowledge = ['语文', '数学', '英语']
    scores = dict.fromkeys(knowledge, 60)
    3、通过dict()映射函数创建
    创建格式注意事项
    a = dict(str1=value1, str2=value2, str3=value3)str 表示字符串类型的键,value 表示键对应的值。使用此方式创建字典时,字符串不能带引号。
    #方式1
    demo = [('two',2), ('one',1), ('three',3)]
    #方式2
    demo = [['two',2], ['one',1], ['three',3]]
    #方式3
    demo = (('two',2), ('one',1), ('three',3))
    #方式4
    demo = (['two',2], ['one',1], ['three',3])
    a = dict(demo)
    向 dict() 函数传入列表或元组,而它们中的元素又各自是包含 2 个元素的列表或元组,其中第一个元素作为键,第二个元素作为值。
    keys = ['one', 'two', 'three'] #还可以是字符串或元组
    values = [1, 2, 3] #还可以是字符串或元组
    a = dict( zip(keys, values) )
    通过应用 dict() 函数和 zip() 函数,可将前两个列表转换为对应的字典。
  • 访问
    1、使用key来作为索引,dictname[key]
    2、使用get(key,default)函数,当键不存在时返回default,也可缺省
  • 删除
    del dictname

  • 添加键值对
    直接用键值赋值的方式dictname[key]=value
    如 dict_a['test']=0
  • 删除指定键值对
    使用del
    如 del dict_a['test']
  • 修改现有的键值对
    指修改键值对中的值
    如 dict_a['test']=2
    
  • 判断是否存在指定键值对
    in/not in 判断是否有key
    a = {'数学': 95, '语文': 89, '英语': 90}
    # 判断 a 中是否包含名为'数学'的key
    print('数学' in a) # True
    # 判断 a 是否包含名为'物理'的key
    print('物理' in a) # False
  • keys()、values()、items()

     

    keys() 方法用于返回字典中的所有键(key);
    values() 方法用于返回字典中所有键对应的值(value);
    items() 用于返回字典中所有的键值对(key-value)
    
    可以使用以下方法来使用上述方法返回的数据
    1、使用list(),将数据数据转换成列表
    a = {'数学': 95, '语文': 89, '英语': 90}
    b = list(a.keys())
    print(b)
    //['数学', '语文', '英语']
    2、使用for in循环遍历其返回值
    a = {'数学': 95, '语文': 89, '英语': 90}
    for k in a.keys():
        print(k,end=' ')
    print("\n---------------")
    for v in a.values():
        print(v,end=' ')
    print("\n---------------")
    for k,v in a.items():
        print("key:",k," value:",v)
    
    copy()方法 复制原数据
    update()方法 使用一个字典所包含的键值对来更新已有的字典,不存在的会直接添加进去
    pop()和popitem()方法
    pop() 和 popitem() 都用来删除字典中的键值对,不同的是,pop() 用来删除指定的键值对,而 popitem() 用来随机删除一个键值对,它们的语法格式如下:
    dictname.pop(key)
    dictname.popitem()
    其中,dictname 表示字典名称,key 表示键。
    
    setdefault()方法
    如果该 key 存在,那么直接返回该 key 对应的 value;
    如果该 key 不存在,那么先为该 key 设置默认的 defaultvalue,然后再返回该 key 对应的 defaultvalue。
    

set

和C++里的set类似,都是保存的不重复的元素,但是只能存放相同类型的数据

  • 创建
    1、使用{}创建
    2、set()函数创建集合
  • 访问
    使用for循环取出
    如
    a = {1,'c',1,(1,2,3),'c'}
    for ele in a:
        print(ele,end=' ')

  • 删除 del()
  • 添加元素
    setname.add(element) 
    
  • 删除元素
    setname.remove(element)
  • 集合运算:交集、并集、差集
表 1 Python set集合运算
运算操作Python运算符含义例子
交集&取两集合公共的元素>>> set1 & set2
{3}
并集|取两集合全部的元素>>> set1 | set2
{1,2,3,4,5}
差集-取一个集合中另一集合没有的元素>>> set1 - set2
{1,2}
>>> set2 - set1
{4,5}
对称差集^取集合 A 和 B 中不属于 A&B 的元素>>> set1 ^ set2
{1,2,4,5}

set集合方法

set方法
方法名语法格式功能实例
add()set1.add()向 set1 集合中添加数字、字符串、元组或者布尔类型>>> set1 = {1,2,3}
>>> set1.add((1,2))
>>> set1
{(1, 2), 1, 2, 3}
clear()set1.clear()清空 set1 集合中所有元素>>> set1 = {1,2,3}
>>> set1.clear()
>>> set1
set()

set()才表示空集合,{}表示的是空字典
copy()set2 = set1.copy()拷贝 set1 集合给 set2>>> set1 = {1,2,3}
>>> set2 = set1.copy()
>>> set1.add(4)
>>> set1
{1, 2, 3, 4}
>>> set1
{1, 2, 3}
difference() set3 = set1.difference(set2)将 set1 中有而 set2 没有的元素给 set3>>> set1 = {1,2,3}
>>> set2 = {3,4}
>>> set3 = set1.difference(set2)
>>> set3
{1, 2}
difference_update()set1.difference_update(set2)从 set1 中删除与 set2 相同的元素>>> set1 = {1,2,3}
>>> set2 = {3,4}
>>> set1.difference_update(set2)
>>> set1
{1, 2}
discard()set1.discard(elem)删除 set1 中的 elem 元素>>> set1 = {1,2,3}
>>> set1.discard(2)
>>> set1
{1, 3}
>>> set1.discard(4)
{1, 3}
intersection()set3 = set1.intersection(set2)取 set1 和 set2 的交集给 set3>>> set1 = {1,2,3}
>>> set2 = {3,4}
>>> set3 = set1.intersection(set2)
>>> set3
{3}
intersection_update()set1.intersection_update(set2)取 set1和 set2 的交集,并更新给 set1>>> set1 = {1,2,3}
>>> set2 = {3,4}
>>> set1.intersection_update(set2)
>>> set1
{3}
isdisjoint()set1.isdisjoint(set2)判断 set1 和 set2 是否没有交集,有交集返回 False;没有交集返回 True>>> set1 = {1,2,3}
>>> set2 = {3,4}
>>> set1.isdisjoint(set2)
False
issubset()set1.issubset(set2)判断 set1 是否是 set2 的子集>>> set1 = {1,2,3}
>>> set2 = {1,2}
>>> set1.issubset(set2)
False
issuperset()set1.issuperset(set2)判断 set2 是否是 set1 的子集>>> set1 = {1,2,3}
>>> set2 = {1,2}
>>> set1.issuperset(set2)
True
pop()a = set1.pop()取 set1 中一个元素,并赋值给 a>>> set1 = {1,2,3}
>>> a = set1.pop()
>>> set1
{2,3}
>>> a
1
remove()set1.remove(elem)移除 set1 中的 elem 元素>>> set1 = {1,2,3}
>>> set1.remove(2)
>>> set1
{1, 3}
>>> set1.remove(4)
Traceback (most recent call last):
  File "<pyshell#90>", line 1, in <module>
    set1.remove(4)
KeyError: 4
symmetric_difference()set3 = set1.symmetric_difference(set2)取 set1 和 set2 中互不相同的元素,给 set3>>> set1 = {1,2,3}
>>> set2 = {3,4}
>>> set3 = set1.symmetric_difference(set2)
>>> set3
{1, 2, 4}
symmetric_difference_update()set1.symmetric_difference_update(set2)取 set1 和 set2 中互不相同的元素,并更新给 set1>>> set1 = {1,2,3}
>>> set2 = {3,4}
>>> set1.symmetric_difference_update(set2)
>>> set1
{1, 2, 4}
union()set3 = set1.union(set2)取 set1 和 set2 的并集,赋给 set3>>> set1 = {1,2,3}
>>> set2 = {3,4}
>>> set3=set1.union(set2)
>>> set3
{1, 2, 3, 4}
update()set1.update(elem)添加列表或集合中的元素到 set1>>> set1 = {1,2,3}
>>> set1.update([3,4])
>>> set1
{1,2,3,4}

 frozenset(set集合的不可变版本)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值