大数据学习路线 学习笔记 Day5

大数据学习路线 学习笔记 Day5

一、数据容器

list列表、tuple元组、dict字典、set集合

1. list 列表

list列表是一种有序的集合,可以随时添加和删除其中的元素。list列表中的每个值都有对应的位置值,称之为索引index,第一个索引是 0,第二个索引是 1,依此类推。

list的特点:有序,可变,元素类型不要求统一,元素可以重复

# 定义一个list,并查看类型,列表用  [   ]   定义
list1=[1,2,5,3,1,'abc',1.1,False]
print(list1)
print(type(list1))

image-20230325140131056.png

列表内元素可以重复,也可以不是同一种数据类型

list1=[1,2,5,3,1,'abc',1.1,False]
# 有序的证明:如果可以通过索引(下标index)提取容器中的元素则证明它是有序的
print(list1[0])
print(list1[4])
print(list1[7])
print(list1[-2])#python支持负数索引,表示从右往左数第几个

image-20230325143152877.png

通过 list[下标值] 可以提取容器中的元素,这也证明了list列表是有序的数据容器。python支持负数索引,表示从右往左数第几个。

但是,当输入的下标值超出范围时,就会报错。

list1=[1,2,5,3,1,'abc',1.1,False]
print(list1[8])

image-20230325142852780.png

报错!!! 错误原因:下标超出范围,即越界!!!

list列表常用操作

索引、 切片、增加、删除、修改、查询元素
定义一个list用变量classmates接收,保存了班里同学的名字 classmates = [‘James’, ‘Kobe’, ‘Polo’]
list列表自带了很多方法可以进行调用

image.png

列表增删操作示例:

# 定义一个list用变量classmates接收,保存了班里同学的名字
classmates=['James','Kobe','Polo']
# 增
classmates.append(('Irving'))
print(classmates)                     #append方法在列表内添加元素,直接添加到末尾
classmates.insert(2,'Joedan')
print(classmates)                     #insert方法通过指定下标,在准确位置插入元素
# 删
classmates.remove('James')
print(classmates)                     #remove方法指定元素进行移除
classmates.pop(0)
print(classmates)                     #pop方法通过指定下标,移除指定元素
del classmates[0]
print(classmates)                     #del关键字也可指定下标移除元素

image.png

注意:列表list的这些方法作用在列表本身上的,方法的返回值为空值 ,例如:

classmates=['James','Kobe','Polo']
classmates.append(('Irving'))            
print(classmates.append(('Irving')))
print(classmates)
# append方法是在列表本身内部添加元素,改变的是classmates列表本身。直接print,返回值为None

image.png

列表查改操作示例:

list1=[1,10,3,5,4,7,9,1,6,7,1,12,1]
# 查
print(list1.index(6))        #index方法查找指定元素的下标值,查询位置
print(list1.count(1))        #count方法查找指定值出现的次数
print(len(list1))            #用len函数可以查询列表的长度,即下标的最大值
# 改
list1.sort()
print(list1)                 #sort方法将原列表从小到大排序
list1.reverse()
print(list1)                 #reverse方法将原列表中的元素反转
list1[0]=20
print(list1)                 #通过指定下标值直接修改某个元素
list1.clear()
print(list1)                 #clear方法清空列表

image.png

注意:查操作可以直接print出来,因为没有改变列表本身,其返回值就是找到的量

补充:两个列表合并的方法:

# extend 拓展list
l1 = [1, 2, 3, 4]
l2 = [2, 3, 4, 5, 6]
print(l1)
print(l2)
l1.extend(l2)
print(l1)
# 两个list直接相加
l3 = [1, 2, 3, 4, 5]
l4 = [2, 3, 4, 5, 6]
l5 = l3 + l4
print(l3)
print(l4)
print(l5)

image.png

切片操作
list2=[1,2,3,4,5,6,7,8]
print(list2)
print(list2[0:7:1])         #左闭右开[开始,结束),故下标为7的数字8没有打印出来
print(type(list2[0:7:1]))   #切片返回的也是一个列表
print(list2[::])
'''起始位置、结束位置、步长都可以省略,如省略则等于默认值。
默认值:起始位置默认从头开始,结束位置默认最后的位置,步长默认为1'''
print(list2[::-1])          #将列表从尾部往前逐一输出,最后得到列表顺序颠倒的效果
print(list2[::2])           #步长为2,即间隔一个输出一个
print(list2)                #切片操作返回新的列表,没有改变原列表

image.png

切片一般用于提取数据容器中的一部分元素 ,切片操作需要提供起始索引位置最后索引位置,然后用冒号 : 将两者分开,切片操作返回一系列从起始索引位置开始到最后索引位置结束的列表
注意:结果包含起始位置的值,但不包含结束位置的值
起始位置、结束位置、步长都可以省略,如省略则等于默认值
切片操作同样适用于:字符串、元组中,以及后续numpy、pandas中的数据结构

image.png

2.tuple元组

tuple元组是一种可以使得代码更安全防止错误赋值导致重要对象的改变的数据容器。

特点:不可变,有序,元素类型不要求统一,元素可以重复

与列表list的唯一区别就在于元组是不可变的!!!!!元组一般用于数据传入和接收过程中不可修改的场景。

#定义一个元组,并打印类型,元组用  (  ) 定义
classmates = ('James', 'Kobe', 'Polo')
print(classmates)
print(type(classmates))

image.png

由于元组是不可变的,因此元组对象没有 append()、insert()和del这样的方法,tuple元组自带的方法相对来说就很少了。

tuple中就两个方法index、count同list类似

classmates = ('James', 'Kobe', 'Polo')
# 通过下标取元素
print(classmates[1])
# 元组的 index 方法,查询指定元素下标
print(classmates.index('Polo'))
# 元组的 count 方法,查询指定元素数量
print(classmates.count('Polo'))

image.png

因为元组不能修改 ,所以不能进行赋值操作

classmates = ('James', 'Kobe', 'Polo')
classmates[1]='Mike'

image.png

报错!!错误原因:元组类型不支持赋值操作

如何创建只有一个元素的元组?

# 创建只有一个元素的元组时,不能使用()
tuple1 = (1)
print(tuple1, type(tuple1))  # 1 <class 'int'>
tuple2 = (1,)
print(tuple2, type(tuple2))
tuple3 = tuple([1])  # 需要通过list传递元素 构建元组
print(tuple3, type(tuple3))

image.png

创建只有一个元素的元组时,不能直接使用 ( ) ,可以使用 ( 元素,)的形式,或者使用列表传递元素。



再补充一个关于列表list的知识点:列表生成式

列表生成式,是一种Python内置,非常简单却强大,可以通过表达式推导来生成一个list列表的方式,又名列表推导式。
我们如何生成[1 * 1, 2 * 2, 3 * 3, …, 10 * 10]的一个列表?
方法一:使用循环语句

# 列表生成式
# 方法一:循环
list=[]
for i in range(1,11):
    list.append('{}*{}'.format(i,i))
print(list)

image.png
方法二:使用列表推导式,一行代码即可代替循环生成上面的list。
写列表生成式时,把要生成的元素x * x放到前面,后面跟for循环,就可以把list创建出来。

# 方法二:列表推导式
print(['{}*{}'.format(i,i) for i in range(1,11)])

image.png
for循环后面还可以加上if判断,例如仅将偶数筛选出来:

还可以使用两层循环,例如生成ABC和XYZ中全部字母的排列组合:

print(['{}*{}'.format(i,i) for i in range(1,11) if i%2==0])
print([m+n for m in 'ABC' for n in 'XYZ'])

image.png
关于列表推导式的详细示例可以看我的另一篇博客:
用Python一行代码打印九九乘法表

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值