Python基础知识讲解(2)

本文详细介绍了Python中的四种基本数据结构:列表、元组、集合和字典,包括它们的创建、元素访问、修改、删除、排序以及切片操作。特别强调了列表的索引、切片、添加、删除和排序方法,以及集合的无序性和去重特性。
摘要由CSDN通过智能技术生成

Python的数据结构

1.列表(list)

''' 空列表(bool值为False) '''
list01 = []
''' 列表内部的单个元素可以是任意一种数据类型 '''
list02 = [1,'你好',1.2]
list03 = [1,[2,'不要白嫖','请你点赞']]
''' 列表内部的元素可以是列表,也可以是元组,集合,字典 '''
''' 当然也可以是整数,浮点数,字符串 '''

怎么去表达每个元素的位置?

'''1.索引取值'''
a = [1, 2, 3.3, 'abcd', 5, "上山打老虎"]
print(a[0])
print(a[1])
print(a[2])
print(a[3])
print(a[4])
print(a[5])
print(a)
'''如果输出超过最大索引值的数字会怎么样?'''
# print(a[6])

'''2.通过某个列表中的元素的值 取到对应的索引号'''
# 使用: 列表名.index(元素) 方法可以获取到指定列表的指定元素的索引
# 例如:a 列表中 的 'abcd'元素的索引号
# a = [1, 2, 3.3, 'abcd', 5, "你好"]
# print(a.index('abcd'))  # a[3]

'''3.通过for循环,依次全部取出'''
# a = [1, 2, 3.3, 'abcd', 5, "你好"]
# for i in a:  # 依次拿到列表当中的每个元素
# print(a.index(i), i)  # 索引与元素本身 一一对应 打印输出

'''嵌套列表取值:'''
# a = [1, 2, 3.3, 'abcd', 5, "你好", [1, 2, 3], 10]
# print(a[6])
# print(a[6][2])

列表的修改操作

"""
列表的切片操作: 分段式取值
"""
#    0  1   2     3     4     5
a = [1, 2, 3.3, 'abcd', 5, "上山打老虎"]

# print(a[1:3])
# print(a[3])
# print(a[3:4])
'''因为0表示从开头进行截取,所以是可以省去的'''
# print(a[0:3])
# 简写的模式,同a[0:3]
# print(a[:3])
'''如果列表要截到最后,也是可以省去的'''
# print(a[1:6])
# print(a[1:])
# print(a[:])

# print(a[1:len(a)])  # 7   1-6   10   0-9
# 简写的模式,同a[1:6]
# print(a[1:])

# 考题
# print(a[:])

# 当需要取出第二个元素到第五个元素到特定数据时
# print(a[1:5])
# 因为索引都是从0开始的,且这个选定的范围是包头去尾的,
# 所以第二个元素的索引是1,而第五个元素的索引是4,我们则需要取到5


# 步长
# 在第二个元素到第五个元素中间,每2个元素取第1个
#    0  1   2     3     4     5
a = [1, 2, 3.3, 'abcd', 5, "上山打老虎"]
# print(a[1:5])
# print(a[1:5:2])  # 1 , 2 , 3 , 4
# print(a[2:5])
# print(a[2:5:2])
# print(a[1:4:2])  # 1 , 2 , 3

# 思考:如果步长为1,是什么效果?

# 同样的操作,我们可以倒叙取值,
# 例如最后一个元素
# print(a[-1])

# 取最后两个元素
# print(a[-2:-1:1])
# print(a[-2:1:-1])

'''切片方向和步长方向不一致时,是切不到东西的'''
# print(a[-2:1:1])


# 因为我们都是假定不知道列表的长度,所以最后的索引直接可以省去


"""
列表的数据添加
"""
# 1.append() 添加
a = [1, 2, 3.3, 'abcd', 5, "上山打老虎"]
# a.append(4)
# print(a)
# append()这里的添加数据是指将数据作为一个元素直接添加到原来的列表中的最后面

# 2.extend() 拓展
a = [1, 2, 3.3, 'abcd', 5, "上山打老虎"]
# a.append([6, 7])
# print(a)

# 等价关系
# for i in [6, 7]:  # a.extend([1,2,3])
#     a.append(i)
#
# print(a)

b = [1, 2, 3.3, 'abcd', 5, "上山打老虎"]
# b.extend([6, 7])
# print(b)
# b.extend(['lalala', 7])
# print(b)
# extend()添加进来的列表不再是以列表的形式保存在a中了,
# 而是将每一个元素单独作为数据保存在原有列表中

# 3.insert():数据的插入,指定数据插入在列表的哪一个索引的位置。
a = [1, 2, 3.3, 'abcd', 5, "上山打老虎"]
# 在索引为4的位置插入数据'哈哈哈哈'
# a.insert(4, '哈哈哈哈')
# print(a)
# 在索引为4的位置插入列表
# a.insert(4, [2, 3])
# print(a)


"""
列表数据的修改
"""
# 可以直接通过指定列表的索引来修改对应的值
lyst = ['大娃', '二娃', '三娃', '四娃', '五娃', '六娃', '七娃']
# lyst[3] = '蝎子精'
# print(lyst)

# 通过切片操作,我们甚至能批量修改
# lyst[3:6] = ['爷爷', '大妖怪', '小妖怪', '蛇精']
# print(lyst)
# lyst[3:6] = 'abcdef'
# print(lyst)

"""
列表数据的删除
"""
# 1.pop():可以将列表里的数据剔除并返回出来,括号内填的是索引
a = [1, 2, 3.3, 'abcd', 5, "上山打老虎"]
# c = a.pop()
# print(c)
# print(a)

# 再执行一次呢?
# print(a.pop(2))
# print(a)
# pop()默认删除最后一个元素

# 2.clear():一键清除所有元素
# a = [1, 2, 3.3, 'abcd', 5, "上山打老虎"]
# a.clear()
# print(a)
# print(type(a))

# del a
# print(a)



# remove()
# a = [1, 2, 3.3, 'abcd', 5, "上山打老虎"]
# a.remove('abcd')
# print(a)


"""
列表的排序
"""
# sort()方法
a = [1, 2, 5, 6, 3, 9]
# a.sort()
# print(a.sort())
# print(a)

# 如果数据类型不同呢?
# a = [1, 2, 3.3, 'abcd', 5, "上山打老虎"]
# a.sort()
# print(a)

# 当列表里都是字符串时(也是可以排序的)
# a = ['2', '5', 'a', 'd', 'ab', 'ac']
# a.sort()
# print(a)

# ord()函数的作用:
# print(ord('2'))
# print(ord('5'))
# print(ord('a'))
# print(ord('d'))
# print(ord('ab'))
# print(ord('ac'))

"""
字符串的比较是依据字符对应的 ASCII 数值或者 Unicode 数值,
从小到大依次排列,当字符串中存在多个字符时,会优先比较第一个,
第一个相同时会比较第二个,以此类推,直到确定顺序的大小。
我们可以通过ord()函数测试一下:
ord()函数以一个字符串(Unicode 字符)作为参数,
返回对应的 ASCII 数值或者 Unicode 数值.
"""

# 排序不仅可以从小到大,也可以从大到小(reverse参数)
# a = [9, 21, 3, 6, 5.5, 10, 1.9, 0]
# a.sort(reverse=False) # 从小到大,True是从大到小
# print(a)

# a = ['2', '5', 'a', 'd', 'ab', 'ac']
# a.sort(reverse=False)
# print(a)

# reverse() 函数:直接反转列表(区别?)
a = [9, 21, 3, 6, 5.5, 10, 1.9, 0]  # a[::-1]

# a.reverse()
# print(a)

# print(a[:3:-1]) # 是从左往右还是从右往左,取决于步长方向
# print(a[::-1])

2.元组(tuple)

''' 空元组 '''
tuple01 = ()
''' 只含有一个元素的元组 '''
tuple02 = (1,) # 这个逗号是必须要加的,否则解释器会认为括号内的这个元素才是tuple02的类型
''' 元组内部的元素要求同列表一样 '''
"""
元组:就像是一个被束缚的列表
元组一旦确定了,就无法对它进行任何修改
"""
a = (1, 2, 3, 4, 5)
# print(a)
# print(a[0])
# print(a[1:3])

# print((1))
# print(type((1)))

# print((1,))
# print(type((1,)))

# for循环迭代遍历
for i in a:
	print(i)

# 如果你想做修改呢?
a[0] = '哈哈'
print(a)

3.集合(set)

''' 空集合 '''
empty_set = set()
''' 此时很多人会有疑问,空集合为什么不是 {} 这样表示的,这是空字典的表示方式,不是空集合的 '''
''' 至于为什么,我只能回答你这是规定哈哈 '''
b = {1, 1, 2, 2, 4, 4, 5, 5, 3, 0, 3, 6, 6}
# print(b)

# 是否无序
b = {'a', 'b', 'c', 'd', 'e', 'f'}
# print(b)

# for i in b:
    # print(b)  # 思考:为什么b不变了,为了确保在一次循环中所有元素都能够被迭代遍历而且仅有一次,所以从for开始,集合便被固定住了
    # print(i)


# 所以,没有索引,并且连需要用到索引的添加和插入操作都没有

# 1.删除元素
b = {2, 4, 5, 15, 1, 2, 6, 8, 9, 10, 11, 12, 17, 19, 29, 39, 49, 59, 34, 6, 99, 200, 22, 122}
# pop()
# 当集合当中全部是数字时,貌似删除的是一个固定值,其实本质上还是随机值(int类型原因)
# 事实上每次删除的都是集合里面第一个位置的元素,但是因为集合的无序性,所以每次第一个位置的元素都是随机的,所以就可以认为随机删除,而对于整数这类特殊排序的集合
# 每次第一个位置固定都是“1”,所以只删除“1”
# print(b.pop())
# print(b)

# remove()
# b.remove(1)
# print(b)
# 当集合里是字符串类型时(验证是否是随机删除)
# b = {'a', 'b', 'c'}
# print(b.pop())
# print(b)  # 是否是随机? 是

# clear():不管是否有序,全部清空
# b = {'a', 'b', 'c'}
# b.clear()
# print(b)

# 注意: 空集合是set()表示, {}用来表示后面会学到的空字典
# print(type({}))
# print(type(set()))

# 集合添加元素
# add
# a = {'a', 'b', 'c'}
# a.add('d')
# print(a)

# update,可以实现把可迭代数据中的元素分别加入到集合中
# a = {'a', 'b', 'c'}
# a.update(['e', 'd', 'f'])
# print(a)

# a = {'a', 'b', 'c'}
# a.update('d')
# print(a)

集合是无序且自动去重的数据类型,所以无论你怎么去定义一个集合中的元素,当你进行print操作后你所看到的内容都将是自动去重的,且每一次print操作后的顺序都是随机的,但是数字类型数据(整数和浮点数)单独存在于集合中时,会按照从小到大的顺序排列

这是为什么呢?
这就涉及到很底层的内容了,要知道,每一个你能够从键盘上打出来的字符或数字都具有自己的哈希值,而集合排序的顺序就是按照哈希值来排序的,这里了解到这就好

4.字典(dict)

后续会单独出一篇文章讲解

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值