python基础——容器

一、元组 tuple

数据形式

(数据1,数据2,数据3.....)

元组数据是不可修改,数据是有序的,支持下标获取数据

无法增加,修改,删除数据,只能进行数据查询

1-1 元组定义

# 元组定义
data_tuple1 = (1,2,3,4)
data_tuple2 = (1.2,2.34,3.15,4.26)
data_tuple3 = ('a','b','c','d')
data_tuple4 = (['asd','2213'],[123,3342])
data_tuple5 = ((12,345,74,21),('ndkla','123'))
print(data_tuple1)
print(data_tuple2)
print(data_tuple3)
print(data_tuple4)
print(data_tuple5)
​
# 元组只有一个元素数据时,需要加逗号
data_tuple6 = (10)
print(type(data_tuple6))
data_tuple7 = ('张三',)
print(type(data_tuple7))

1-2 元组数据取值

通过下标取值,或for循环遍历取值

元组数据不可修改,所以没有添加,删除,修改的方法

# 元组定义
data_tuple1 = (1,2,3,4)
data_tuple2 = (1.2,2.34,3.15,4.26)
data_tuple3 = ('a','b','c','d')
data_tuple4 = (['asd','2213'],[123,3342])
data_tuple5 = ((12,345,74,21),('ndkla','123'))
print(data_tuple1)
print(data_tuple2)
print(data_tuple3)
print(data_tuple4)
print(data_tuple5)
​
# 元组只有一个元素数据时,需要加逗号
data_tuple6 = (10)
print(type(data_tuple6))
data_tuple7 = ('张三',)
print(type(data_tuple7))
​
# 元组是有序数据,支持下标
print(data_tuple3[2])
print(data_tuple3[1:4])
​
# 容器都支持for循环取值
for i in data_tuple5:
    print(i)

1-3 元组数据查找

# 查找数据
i = data_tuple_str.index('python')
print(i)
​
# 查找出现的次数
num = data_tuple_str.count('a')
print(num)
​
​
# 计算元素个数
print(len(data_tuple_str))

元组的特性和字符串特性一样

但是元组能存储的数据类型比字符串多

二、字典 dict

字典数据格式

{k1:v1,k2:v2,k3:v3}

字典的本质就是给下标命名一个名字

user = [1,'张三',20,'男','篮球','1371111111','北京','23123@qq.com']

2-1 字典定义

# 字典定义
data_dict1 = {1:'hadoop',2:'python',3:'spark',4:'hadoop'}
data_dict2 = {'a':'hadoop','b':'python','c':'spark','d':'hadoop'}
print(data_dict1)
print(data_dict2)
# 字典中不要重复定义key值,保证key值唯一
data_dict3 = {'a':'hadoop','b':'python','c':'spark','a':'flink'}
print(data_dict3)
​
# 使用key的下标值进行value部分取值
print(data_dict1[2])
print(data_dict2['d'])
​
# 字典下标不支持切片操作
# print(data_dict1[1:4])

2-2 字典取值

字典的内容包含两部分 key 和 value

在字典取值时可以分别取出两部分的数据

  • 取value部分的数据

    • 方式1 通过key取value 一次只能取一个value值

      • data[key]

      • data.get(key)

    • 方式二 获取所有的value值

      • data.values()

# 取字典的value值
data_dict2 = {'a':'hadoop','b':'python','c':'spark','d':'hadoop'}
​
# 通过key取value
# 使用[] 取值,如果key不存在会报错
res = data_dict2['a']
print(res)
# get取值时  key不存在会返回一个None值
res2 = data_dict2.get('z')
print(res2)
​
# 将字典中value值全部取出
res3 = data_dict2.values()
print(res3)
  • 取key值部分

    • 获取所有key值

    • data.keys()

# 获取字典中的所有key值
res4 = data_dict2.keys()
print(res4)

2-3 字典的增加和修改数据

字典数据的增加和修改语法一样,针对va部分的数据进行增加和修改

data[key]=value 将key对应的value修改或增加新的值

key值不存在则是增加数据,key存在则是修改数据

# 增加或修改字典数据
data_dict = {'id':1,'name':'张三','age':20,'gender':'男'}
print(data_dict)
# key值存在,修改对应的value数据
data_dict['age'] = 22
print(data_dict)
​
# key不存在,则增加薪数据
data_dict['hobby'] = '篮球'
print(data_dict)

2-4 字典删除

del data[key]

# 删除字段数据
# 通过key确定删除的数据
data_dict = {'id':1,'name':'张三','age':20,'gender':'男'}
print(data_dict)
del data_dict['name']
print(data_dict)
​
# 清空数据
data_dict.clear()
print(data_dict)

2-5 for循环遍历

  • 格式

    • 字典for循环需要配合items方法

for 变量1,变量2 in data_dict.items():
    变量1接收key值部分
    变量2接受value部分
# 字典的for循环遍历
data_dict = {'id':1,'name':'张三','age':20,'gender':'男'}

for k,v in data_dict.items():
    print(k,v)

小结

一个用户数据如何存储?

姓名:张三 年龄:20 体重(kg):60 性别:男

在单个数据存储时,建议使用字典,字典的key可以用来描述数据是什么

['张三',20,60,'男'] ('张三',20,60,'男')

{'name':'张三','age':20,'weight':60,'gender':'男'}


多个用户数据如何存储?

姓名:李四 年龄:50 体重(kg):50 性别:男

{'name':'李四','age':50,'weight':50,'gender':'男'}


({'name':'张三','age':20,'weight':60,'gender':'男'},{'name':'张三','age':20,'weight':60,'gender':'男'})

user_list = [{'name':'张三','age':20,'weight':60,'gender':'男'},{'name':'张三','age':20,'weight':60,'gender':'男'}]

user_list.insert(0,{})

user_list.append{{}}

元组不能添加新数据,列表可以添加的新的数据

实际开发中就使用字典和列表组合完成多个数据存储

[{第一条数据},{第二条数据},{第三条数据}.....]

# 字典和列表数据组合完成多条数据存储
user1 = {'name':'张三','age':20,'gender':'男'}
user2 = {'name':'李四','age':22,'gender':'男'}
user3 = {'name':'王五','age':21,'gender':'男'}

# 将多个用户数据保存在列表中
data_list = []
data_list.append(user1)
data_list.append(user2)
data_list.append(user3)
print(data_list)

# 对每个用户数据进行处理 增加一个体重信息
for user in data_list:
    print(user)
    # 用户增加数据
    if user['name'] == '张三':
        user['weight'] = 55
    elif user['name'] == '李四':
        user['weight'] = 60
    else:
        user['weight'] = 100

print(data_list)

三、集合

数据形式

{数据1,数据2,数据3}

不重复的无序数据

集合的主要场景是去重

3-1 集合的定义

# 集合的定义
data_set1 = {1,22,13,4}
data_set2 = {1.1,2.35,3.16,4.28}
data_set3 = {'a','b','c','s','a','a'}
# data_set4 = {['a','b'],['c','s']}
# data_set5 = {{'id':1,'name':'张三'},{'id':2,'name':'李四'}}
data_set6 = {(1,2,3),('a','b')}
# data_set7 = {{1,2,3},{'a','b','c'}}
print(data_set1)
print(data_set2)
print(data_set3)
# print(data_set4)
# print(data_set5)
print(data_set6)
# print(data_set7)

有序的数据可以通过下标和for循环取值

list[0]

str[0]

tuple[0]

dict[key]

无序数据只能通过for循环取值

# 集合取值
data_set_str = {'hadoop', 'hive', 'oozie', 'spark', 'python', 'hive'}
for i in data_set_str:
    print(i)

3-2 集合增删改

  • 增加数据

    • add

  • 删除

    • remove

    • clear

  • 修改

    • update

    • 用于修改当前集合,可以添加新的元素或集合到当前集合中,如果添加的元素在集合中已存在,则该元素只会出现一次,重复的会忽略。

# 增加的数据
data_set.add('hive')
print(data_set)
# 删除数据
data_set.remove('hadoop')
print(data_set)
# 更新数据
data_set.update(['flink222'])
print(data_set)

集合类型的数据主要作用时去重

将数据转为set集合后最将重复数据去除

四、公共方法

4-1 容器类型之间的转化

str(数据) 将数据转为字符串

list(数据) 将数据转为列表

set(数据) 将数据转为集合

tuple(数据) 将数据转为元组

# 容器类型之间的转化
data_str = 'itcast'
data_list = ['hadoop','hive','spark','python','list','python']
data_tupe = ('hadoop','hive','spark','python','tuple','hadoop')
data_set = {'hadoop','hive','spark','python','set'}

# 字符串
print(list(data_str))
print(tuple(data_str))
print(set(data_str))

# 元组操作
print(str(data_tupe))
print(list(data_tupe))
print(set(data_tupe))

# 列表
print(str(data_list))
print(tuple(data_list))
print(set(data_list))

4-2 运算符

运算符描述支持的容器类型
+合并字符串、列表、元组
*复制字符串、列表、元组
in元素是否存在字符串、列表、元组、字典,集合
not in元素是否不存在字符串、列表、元组、字典,集合
# + *
data_str1 = 'itcast'
data_str2 = 'python'

data_list1 = ['a', 'b']
data_list2 = ['c', 'd']

data_tuple1 = ('w', 'q')
data_tuple2 = ('e', 'f')

data_set1 = {1, 2, 3}
data_set2 = {4, 5, 6}

data_dict1 = {'id': 1, 'name': '张三'}
data_dict2 = {'id': 2, 'name': '李四'}

# + 运算符
data_str1_str2 = data_str1 + data_str2  # 字符串+ 是拼接字符串
print(data_str1_str2)

data_list1_list2 = data_list1 + data_list2  # 列表+ 合并列表数据
print(data_list1_list2)

data_tuple1_tuple2 = data_tuple1 + data_tuple2  # 元组+ 合并元组数据
print(data_tuple1_tuple2)
# 集合数据不支持 + 运算
# data_set1_set2 = data_set1+data_set2
# print(data_set1_set2)
# 字典不支持+运算

# * 运算符   数据 * 数值
data_str1_new = data_str1 * 3
print(data_str1_new)
data_list1_new = data_list1 * 3
print(data_list1_new)
data_tuple1_new = data_tuple1 * 3
print(data_tuple1_new)

# 集合和字典不支持 * 运算符
# data_set1_new = data_set1 * 3
# print(data_set1_new)

# 判断元素是否在容器内
if 'i' in data_str1:
    print('在字符串中')
else:
    print('不在字符串中')


if 'a' in data_list1:
    print('在列表中')
else:
    print('不在列表中')

if 'a' in data_set1:
    print('在集合中')
else:
    print('不在集合中')

# 判断key是否在字典中
if 'id' in data_dict1:
    print('key在列表中')
else:
    print('key不在列表中')

4-3 通用函数

编号函数描述支持的容器类型
1len()计算容器中元素个数字符串、列表、元组、字典,集合
2del删除列表和字典
3max()返回容器中元素最大值列表、元组、字典.values(),集合
4min()返回容器中元素最小值列表、元组、字典,集合
5sum()求和列表、元组、字典,集合
6count()统计元素在容器内出现的次数字符串、列表、元组、
7enumerate()给容器显式增加下标值,主要是在for循环场景中字符串、列表、元组、字典,集合
# 容器通用函数
data_str = 'itcast'
data_list = ['hadoop','spark','python','list','python']
data_tuple = ('hadoop','hive','spark','python','tuple','hadoop')
data_set = {'hadoop','hive','spark','python','set','presto','doris'}
data_dict = {'id':1,'name':'张三'}
# len 计算容器元素的个数 
print(len(data_str))
print(len(data_list))
print(len(data_tuple))
print(len(data_set))
print(len(data_dict))

# count 统计元素在容器内出现的次数
print('--------count--------------')
num = data_str.count('t')
print(num)

num2 = data_list.count('hadoop')
print(num2)

num3 = data_tuple.count('hadoop')
print(num3)

# 集合和字典不支持count方法
# num4 = data_set.count('hadoop')
# print(num4)


# 统计字典中value值出现次数
value_data = data_dict.values()
print(list(value_data).count('张三'))

# max min  sum 处理数值数据
print('---------max----------')
data_list2 = [1,22,15,3]
data_tuple2 = (15,10,33,6)
data_set2 = {28,9,15,12}
data_dict2 = {'id':1,'age':20}
print(max(data_list2))
print(max(data_tuple2))
print(max(data_set2))
print(max(data_dict2.values()))
print('------min-----')
print(min(data_list2))
print(min(data_tuple2))
print(min(data_set2))
print(min(data_dict2.values()))
print('-----sum-----------')
print(sum(data_list2))
print(sum(data_tuple2))
print(sum(data_set2))
print(sum(data_dict2.values()))
print('--------平均数----------')
print(sum(data_list2)/len(data_list2))


# 元素数据的删除
print('--------------del------')
# del data_str[0]
# print(data_str)
print(data_list)
del data_list[0]
print(data_list)

# print(data_tuple)
# del data_tuple[0]
# print(data_tuple)

print(data_dict)
del data_dict['id']
print(data_dict)
# enumerate枚举方法的使用
# 容器可以通过for循环遍历数据
data_str = 'pyhton'
for i in data_str:
    # 在遍历数据时,只会获取到每个元素数据,无法获取对应的下标值
    print(i)

# 使用枚举方法获取对应数据的下标值
for i in enumerate(data_str):
    print(i)


data_list = ['hadoop','spark','hive','python','java']
for i in enumerate(data_list):
    print(i)


data_tuple = ('flink','presto','kafka','doris','hdfs')
for i in enumerate(data_tuple):
    print(i)


data_set = {'es','ds','yarn','mr','hdfs'}
for i in enumerate(data_set):
    print(i)
    print(type(i))


data_dict = {'id':1,'name':'张三'}
for i in enumerate(data_dict):
    print(i)

五、推导式

使用一行代码生成对应容器数据

列表推导式

字典推导式

  • 生成一个1-100列表数据

    • [1,2,3,4,5,6,7,8,9,10,.......]

 # 列表推导式
# 生成1--100的列表数据
data_list =[]
for i in range(1,101):
    data_list.append(i)
print(data_list)


# 列表推导式 使用一行代码实现列表生成
# [添加的值  值处理的逻辑]
print([i for i in range(1,101)])
  • 字典推导式

    • 将符合kv数据结构改成字典类型

      • {k:v}

data_str = 'id=1;name=张三;age=20;gender=男'
# {'id':1,'name':'张三','age':20,'gender':'男'}
# 1-现将kv结构的数据进行拆分一个个单独元素  id=1  name=张三
data_split = data_str.split(';')
# 2-将kv数据进一步拆分得到key值和value值
data_dict = {}
for data in data_split:
    key = data.split('=')[0]
    value = data.split('=')[1]
    # 3-将数据添加到字典
    data_dict[key] = value
print(data_dict)


# 字典推导式  使用一行代码
# {k:v kv数据的处理逻辑}
print({data.split('=')[0]:data.split('=')[1]  for data in data_str.split(';')})

容器数据中使用最多的容器是 字符串,列表,字典

字段的split和replace

字典的数据修改和添加

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值