Python基础内容(四、组合数据类型之列表、元组和字典)

四、组合数据类型

内置函数range()

  • 用于生成一个整数序列,返回值是一个迭代器对象
  • 创建range对象的方式:range(【start,】stop【,step】)【…】可省略
    • start:起始索引(默认从0开始)
    • stop:结束索引(不含stop)
    • step:步长,默认为1;步长为负数,表示从右向左切片
  • range类型的优点:
    不管range对象表示的整数的序列有多长,所有range对象占用的内存空间都是相同的;因为仅仅需要存储start,stop,step,只有当用到range对象时,才会去计算序列中的相关元素;
  • in与not in判断整数序列中是否存在(不存在)指定的整数;

列表

可变序列,顺序存储,表中元素可以重复

  • 创建列表
    • list_demo1 = []
    • list_demo2 = list()
  • slice切片:语法格式:[start:end:step]
    • start:切片开始的索引(默认从0开始)
    • end:切片结束的索引(不包含end)(默认序列长度)
    • step:步长,默认为1;步长为负数,表示从右向左切片;
-6-5-4-3-2-1
python
012345
list_demo = [1, 2, 3, 4, 5, 6]
print(list_demo[5::-1])
#[6, 5, 4, 3, 2, 1]
print(list_demo[-1::-1])
#[6, 5, 4, 3, 2, 1]
  • 查找:index(x【,start【,end】】)
    • 找出x第一次出现的位置;
    • start:从开始索引
    • end:结束索引
list_demo = [1, 2, 3, 4, 5, 6, 2]
print(list_demo.index(2))	# 1
添加元素
  • append()
    在列表的尾部追加一个元素,该方法可以接受单个值,也接受元组或列表,但此时,元组或列表作为一个整体追加,形成了嵌套;
list_demo = [1, 2, 3, 4]
list_demo.append([5, 6])
print(list_demo)
#[1, 2, 3, 4, [5, 6]]
  • insert(指定位置,要插入的元素)
    在列表指定的位置插入:
list_demo = [1, 2, 3, 4]
list_demo.insert(1, 9)
print(list_demo)
#[1, 9, 2, 3, 4]
  • extend()
    将一个列表的元素追加到另一个列表的尾部;
list_demo = [1, 2, 3, 4]
list_demo.extend([5, 6])
print(list_demo)
#[1, 2, 3, 4, 5, 6]
  • 切片添加
list_demo1 = [1, 2, 3, 4]
list_demo2 = [5, 6]
list_demo1[1:] = list_demo2
print(list_demo1)
#[1, 5, 6]
删除元素
  • del()
    根据索引删除列表中的一个元素或一段区间中的元素;删除列表
list_demo = [1, 2, 3, 4, 5, 6]
del list_demo[1:2]
print(list_demo)	# [1, 3, 4, 5, 6]
del list_demo	# NameError: name 'list_demo' is not defined
  • remove()
    根据元素本身删除列表中的某个元素
list_demo = [1, 2, 3, 4, 5, 6]
list_demo.remove(2)
print(list_demo)	# [1, 3, 4, 5, 6]
  • clear()
    清空列表
list_demo = [1, 2, 3, 4, 5, 6]
list_demo.clear()
print(list_demo)	# []
  • pop(x)
    弹出并返回索引x的元素;默认弹出列表最后一个值
list_demo = [1, 2, 3, 4, 5, 6]
list_demo.pop()
print(list_demo)	# [1, 2, 3, 4, 5]
置逆和排序
  • 置逆:reverse()和 reversed()
    (reversed()需要列表化)
# 将列表中的元素置逆
list_demo = [1, 2, 3, 4, 5, 6]
list_demo.reverse()
print(list_demo)
# [6, 5, 4, 3, 2, 1]

list_demo1 = [1, 2, 3, 4, 5, 6]
list_demo2 = list(reversed(list_demo1))
print(list_demo2)
# [6, 5, 4, 3, 2, 1]
  • 排序:sort()和 sorted()
    可以通过reverse = True 使元素逆序

    sort()是直接在原列表上排序,sorted()是新生成一个列表进行排序,对原列表无影响

# 将列表中的元素排序
list_demo = [1, 3, 2, 4, 6, 0]
list_demo.sort(reverse=True)
print(list_demo)
# [6, 5, 4, 3, 2, 1]

list_demo1 = [1, 3, 2, 4, 6, 0]
list_demo2 = sorted(list_demo1)
print(list_demo1)	
# [1, 3, 2, 4, 6, 0]
print(list_demo2)
# [0, 1, 2, 3, 4, 6]
浅拷贝与深拷贝
  • copy():浅拷贝,原列表中的可变序列会根据拷贝列表中的序列元素变化而变化
  • deepcopy():深拷贝,避免了浅拷贝对原列表和拷贝列表中可变序列变化的影响
# 浅拷贝
import copy
list_demo1 = [1, 1, 1, [1, 1, 1]]
list_demo2 = copy.copy(list_demo1)
list_demo2[0] = 9
list_demo2[3][0] = 9
print(list_demo1)
# [1, 1, 1, [9, 1, 1]]
print(list_demo2)
# [9, 1, 1, [9, 1, 1]]

# 深拷贝
import copy
list_demo1 = [1, 1, 1, [1, 1, 1]]
list_demo2 = copy.deepcopy(list_demo1)
list_demo2[0] = 9
list_demo2[3][0] = 9
print(list_demo1)
# [1, 1, 1, [1, 1, 1]]
print(list_demo2)
# [9, 1, 1, [9, 1, 1]]
列表生成式

list_demo = [表达式 for i in range(范围)【if 条件】]

list_demo = [i * i for i in range(10) if i % 2 == 0]
print(list_demo)
# [0, 4, 16, 36, 64]

元组

不可变序列,顺序存储,元组中元素可以重复

  • 创建元组

    • tuple_demo1 = ()
    • tuple_demo2 = tuple()
    • tuple_demo3 = 1,

    若创建时只有一个元素,则必须在元素后加逗号,否则被视为变量;


字典

可变序列,哈希存储,字典中的键不可重复且必须是不可变序列,值可以重复

  • 创建字典

    • dict_demo1 = {}

    • dict_demo2 = dict()

    • 以关键字参数的形式创建字典

      dict_demo3 = dict(name='努力学习的小白P', age=30)
      print(dict_demo3)
      # {'name': '努力学习的小白P', 'age': 20}
      
  • 访问元素:字典名[键名]

    如果键名不存在,则返回KeyError: ‘键名’、

添加元素
  • 字典名[键名] = 值

    如果键已存在,则修改值,否则添加新键;

删除元素
  • del ()字典名[键名]

  • popitem()

    返回并删除字典最后一个键值对;

    dict_demo = {'name': '努力学习的小白P', 'age': 20, 'occupation': '学生'}
    print(dict_demo.popitem())
    # ('occupation', '学生')
    
  • pop(键名)

    弹出并返回与键名对应的元素;

  • clear()

    清空字典;

获取键值
  • get()

    返回指定键对应的值,并允许该键不存在时返回特定的值,默认返回None;

    dict_demo = {'name': '努力学习的小白P', 'age': 20, 'occupation': '学生'}
    print(dict_demo.get('努力学习的小白P', '一起来学习吧!'))
    # 一起来学习吧!
    
  • items()
    可以返回字典的键和值,返回值为键值类型;

    dict_demo = {'name': '努力学习的小白P', 'age': 20, 'occupation': '学生'}
    x = dict_demo.items()
    print(x, '\n', type(x))
    # dict_items([('name', '努力学习的小白P'), ('age', 20), ('occupation', '学生')]) 
    # <class 'dict_items'>
    
  • keys()

    返回字典的键;

  • values()

    返回字典的值;

  • fromkeys(keys,value)

    创建新字典,给定keys作字典的键,value为字典所有键的值;

    dict_demo = {}
    x = dict_demo.fromkeys(['小白P', '小白L', '小白J'], '快去学习!')
    print(x)
    # {'小白P': '快去学习!', '小白L': '快去学习!', '小白J': '快去学习!'}
    
字典生成式

zip()函数

  • 用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表;

  • 如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同

  • 利用 * 号操作符,可以将元组解压为列表

a = [1, 2, 3]
b = [3, 2, 1]
c = [1, 2, 3, 4, 5]
zipped = zip(a, b)
print(zipped)
# <zip object at 0x00000168D2C77780>
print(list(zipped))
# [(1, 3), (2, 2), (3, 1)]
print(list(zip(a, c)))
# [(1, 1), (2, 2), (3, 3)]

e, d = zip(*zip(a, b))
print(list(e))
# [1, 2, 3]
print(list(d))
# [3, 2, 1]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力学习的小白P

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值