Python学习日记Day4——组合数据类型(重点)

目录

一、序列和索引

1,序列和索引定义

2,索引分类

 3,切片操作的语法结构

4,序列的相加和相乘操作

5,序列的操作符/函数

二、列表

1,列表定义

2,列表的创建方式

3,列表的删除

4,列表的遍历 (枚举——enumerate枚举函数)

1,遍历元素item

2,遍历索引i

3,enumerate()函数

5,列表的相关操作方法

6,列表的排序操作

1,列表排序的两种方式

2,数值排序sort

3,英文字母排序sort

4,自己设定规则排序sort

5,数值排序sorted

7,列表生成式

8,二维列表

三、元组 

1,元组的定义

2,元组的创建方式

3,删除元组

四、字典

1,字典的创建方式

 2,字典元素的取值

3,字典的相关操作

4,字典生成式

五、集合

1,集合的概念

2,集合的创建方式

3,集合的删除

 4,集合的相关操作

5,集合的增删改

6,集合的遍历

 7,集合的生成式


一、序列和索引

1,序列和索引定义

序列是一个用于存储多个值的连续空间,每个值都对应一个整数的编号,成为索引。

2,索引分类

  1. 正向递增索引:0,1,2,...,N-1
  2. 反向递减索引:-N...-3,-2,-1
#正向递增
s = 'helloworld'
for i in range(0,len(s)):
    print(i,s[i],end='\t\t')
print('\n-------------------')
#反向递减
for i in range(-len(s),0):
    print(i,s[i],end='\t\t')

 0 h        1 e        2 l        3 l        4 o        5 w        6 o        7 r        8 l        9 d        
-------------------
-10 h        -9 e        -8 l        -7 l        -6 o        -5 w        -4 o        -3 r        -2 l        -1 d

 3,切片操作的语法结构

序列[start:end:step]

start:切片的开始索引,包含

end:切片的结束索引,不包含

step:步长,默认为1,步长为-1时字符串逆序输出

s = 'helloworld'
#切片换片
s1 = s[0:5:2]
print(s1)
#省略开始位置,默认start从0开始
print(s[:5:1])
#省略开始位置,省略步长,默认步长为1
print(s[:5:])
#省略结束位置,stop不写,默认取到最后一个元素
print(s[0::1])
#省略结束位置和步长,默认取到最后一个元素
print(s[0::])
print(s[0:])

hlo
hello
hello
helloworld
helloworld
helloworld 

s = 'helloworld'
#切片换片
s1 = s[::-1]
print(s1)

 dlrowolleh

4,序列的相加和相乘操作

s1 = 'hello'
s2 = 'world'
print(s1+s2)
print(s1*5)

helloworld
hellohellohellohellohello

5,序列的操作符/函数

操作符/函数描述说明
x in s如果x是s的元素,则输出True,,否则输出False
len(s)序列s中元素的个数
max(s)序列s中元素的最大值
min(s)序列s中元素的最小值
s.index(x)序列s中第一次出现x的位置
s.count(x)序列s中出现x的次数

二、列表

1,列表定义

列表是指一系列的按特定顺序排列的元素组成。

列表是Python中内置的可变序列。

可变序列:具有增、删、改、查功能的序列,列表是Python中第一个学习的可变数据类型。

列表在Python中使用[]定义列表,元素与元素之间使用英文逗号分隔。

列表中的元素可以是任意的数据类型。

2,列表的创建方式

(1)使用[]直接创建列表

列表名 = [element1,element2,...]

(2)使用内置函数list()创建列表

列表名 = list(序列)

#每一个序列的元素作为列表的元素单独输出

lst1 = ['hello','world',98,20]
print(lst1)
lst2 = list('hello world')#每一个元素单独输出
lst3 = list(range(1,10,2))
print(lst2)
print(lst3)

['hello', 'world', 98, 20]
['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd']
[1, 3, 5, 7, 9]

列表也可以用上面序列的操作符号/函数 

3,列表的删除

del 列表名

4,列表的遍历 (枚举——enumerate枚举函数)

1,遍历元素item

for item in lst:

        print(item)

2,遍历索引i

for i in range(0,len(列表)):

        print((列表[i])

3,enumerate()函数

for index,index in enumerate(列表)

        输出index和item

index是序号,不是索引,索引不能修改起始值,序号可以修改起始值

item是元素

lst = ['hello','world','python','php']
#使用遍历循环for循环遍历列表元素
for item in lst:
    print(item)

#使用for循环,range()函数,len()函数,根据索引进行遍历
for  i in range(0,len(lst)):
    print(i,'-->',lst[i])

#第三种遍历方式enumwrate()函数
for index,item in enumerate(lst):
    print(index,item)#index 是序号,不是索引
print('修改序号的起始值')
#index是序号,那么就可以手动修改序号的起始值,索引就不能修改了
for index,item in enumerate(lst,start = 2):
    print(index,item)

hello
world
python
php
0 --> hello
1 --> world
2 --> python
3 --> php
0 hello
1 world
2 python
3 php
修改序号的起始值
2 hello
3 world
4 python
5 php

进程已结束,退出代码0
 

5,列表的相关操作方法

列表的方法描述说明
lst.append(x)在列表l最后增加一个元素
lst.insert(index,x)在列表中第index位置增加一个元素
lst.clear()清除列表中的所有元素
lst.pop(inddex)将列表中第index位置的元素取出,并从列表中将其删除
lst.remove(x)将列表中出现的第一个元素x删除
lst.reverse()将列表中的元素反转,没有返回值
lst.copy()拷贝列表中的所有元素,生成一个新的列表
lst = ['hello','world','python']
#输出原列表及原列表的内存地址
print('原列表:',lst,id(lst))

#在最后增加元素
lst.append('sql')
print('增加元素之后:',lst,id(list))

#在中间插入元素,在索引值为2的地方增加一个字整型100
lst.insert(2,100)
print(lst)

#将列表中某个索引对应的元素取出,并从列表中删除该元素
lst.pop(1)
print(lst)

#将列表中第一次出现的100删除
lst.remove(100)
print(lst)

#将列表中的某个元素反转
lst.reverse()#在原列表的基础上进行,不会产生新的列表
print(lst)

#列表的复制
lst_2 = lst.copy()
print(lst_2)

#根据索引修改列表元素的修改操作
lst[0] = 'Java'
print(lst)

#列表的清空
lst.clear()
print(lst)

原列表: ['hello', 'world', 'python'] 1587900600840
增加元素之后: ['hello', 'world', 'python', 'sql'] 140708863819056
['hello', 'world', 100, 'python', 'sql']
['hello', 100, 'python', 'sql']
['hello', 'python', 'sql']
['sql', 'python', 'hello']
['sql', 'python', 'hello']
['Java', 'python', 'hello']
[]

6,列表的排序操作

1,列表排序的两种方式

(1)列表对象的sort方法

        lst.sort(key=None,reverse=False)

        key表示排序的规则;reverse表示排序方式,默认升序

(2)内置函数sorted()

        sorted(iterable,key=None,reverse=False)

        iterable表示的是排序的对象

2,数值排序sort

lst = [21,54,13,19,89,52,24,19]
print('原列表:',lst)

#排序,默认是升序
lst.sort()#排序是在原列表的基础上进行的,不会产生新的列表对象
print('升序:',lst)

#排序,降序
lst.sort(reverse=True)
print('降序:',lst)

原列表: [21, 54, 13, 19, 89, 52, 24, 19]
升序: [13, 19, 19, 21, 24, 52, 54, 89]
降序: [89, 54, 52, 24, 21, 19, 19, 13] 

3,英文字母排序sort

按照ASCII码值进行排序,英文单词也是按照首字母排序

升序排序:先排大写,因为大写比小写的ASCII码小32

lst = ['banana','apple','Cat','Orange']
print('原列表:',lst)

#升序排序,先排大写后排小写
lst.sort()
print('升序',lst)

#降序排序
lst.sort(reverse = True)
print("降序:",lst)

原列表: ['banana', 'apple', 'Cat', 'Orange']
升序 ['Cat', 'Orange', 'apple', 'banana']
降序: ['banana', 'apple', 'Orange', 'Cat'] 

4,自己设定规则排序sort

lst = ['banana','apple','Cat','Orange']
print('原列表:',lst)

#自己指定规则:忽略大小写进行比较
lst.sort(key = str.lower)#将单词全都转成小写
print('忽略大小写:',lst)

原列表: ['banana', 'apple', 'Cat', 'Orange']
忽略大小写: ['apple', 'banana', 'Cat', 'Orange'] 

5,数值排序sorted

使用内置的sorted函数进行排序,会生成一个新的列表对象

lst = [4,56,3,78,40,56,89]
print('原列表:',lst)

#sorted函数会生成一个新的列表对象,所以使用sorted函数需要赋值给另一个新的列表对象
#升序
asc_lst = sorted(lst)
print("升序",asc_lst)
#原列表没有任何改变
print('原列表:',lst)

#降序
desc_lst = sorted(lst,reverse=True)
print('降序:',desc_lst)
print('原列表:',lst)

 原列表: [4, 56, 3, 78, 40, 56, 89]
升序 [3, 4, 40, 56, 56, 78, 89]
原列表: [4, 56, 3, 78, 40, 56, 89]
降序: [89, 78, 56, 56, 40, 4, 3]
原列表: [4, 56, 3, 78, 40, 56, 89]

6,英文字母排序sorted

lst = ['banana','apple','Cat','Orange']
print('原列表:',lst)

#忽略大小写进行排序
asc_lst = sorted(lst,key = str.lower)
print('升序:',asc_lst)
print('原列表:',lst)

原列表: ['banana', 'apple', 'Cat', 'Orange']
升序: ['apple', 'banana', 'Cat', 'Orange']
原列表: ['banana', 'apple', 'Cat', 'Orange']

7,列表生成式

使用列表生成式创建列表,列表生成式的语法结构如下:

lst = [expression for item in range]

lst = [expression for item in range if condition]

import random
lst = [item for item in range(1,11)]
print(lst)

lst = [item*item for item in range(1,11)]
print(lst)

lst = [random.randint(1,100)for _ in range(1,11)]
print(lst)

#从列表中选择符合条件的元素组成新的列表
lst = [i for i in range(10) if i%2==0]
print(lst)

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
[61, 18, 4, 74, 50, 80, 30, 59, 96, 41]
[0, 2, 4, 6, 8]

8,二维列表

二维列表:表格数据,在一个列表中嵌套了很多个列表

二维列表的遍历:

for row in 二维列表

        for item in row:

                pass

#创建二维列表
lst = [
    ['城市','环比','同比'],
    ['北京',104,103],
    ['上海',104,504],
    ['深圳',100,39]
]
print(lst)

#遍历二维列表使用双层for循环
for row in lst:#行
    for item in row:#列
        print(item,end = '\t')#打印每一行中所有列的元素
    print()

#用列表生成式生成一个4行5列的二维列表
lst = [[j for j in range(5)] for i in range(4)]
print(lst)

[['城市', '环比', '同比'], ['北京', 104, 103], ['上海', 104, 504], ['深圳', 100, 39]]
城市    环比    同比    
北京    104    103    
上海    104    504    
深圳    100    39    
[[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]] 

三、元组 

1,元组的定义

元组是Python中的不可变序列,没有增删改的操作,只能访问

使用()定义元组,元素与元素之间使用英文逗号分隔

元组中只有一个元素的时候,逗号也不能省略

2,元组的创建方式

(1)使用()直接创建元组

元组名 = (element1,element2,...elementN)

(2)使用内置函数tuple()创建元组

元组名 = tuple(序列)

3,删除元组

del 元组名

元组是一种序列,所以序列的操作对于元组同样适用。

#使用小括号创建元组
t = ('hello','world',[10,20,30,'python'])
print(t)

#使用内置函数创建元组
t = tuple('helloword')
print(t)

t = tuple([10,20,30])
print(t)

print('10在元组中是否存在:',(10 in t))
print('10在元组中是否不存在:',(10 not in t))

print('最大值:',max(t))
print('最小值:',min(t))
print('长度:',len(t))
print('查找元素对应的索引下标:',t.index(10))
print('统计10出现的次数:',t.count(10))

#如果元组中只有一个元素
t = (10,)
print(t)

del t
print(t)

('hello', 'world', [10, 20, 30, 'python'])
('h', 'e', 'l', 'l', 'o', 'w', 'o', 'r', 'd')
(10, 20, 30)
10在元组中是否存在: True
10在元组中是否不存在: False
最大值: 30
最小值: 10
长度: 3
查找元素对应的索引下标: 0
统计10出现的次数: 1
(10,)
Traceback (most recent call last):
  File "E:/Pycharm projects/chap4/元组的创建与删除.py", line 26, in <module>
    print(t)
NameError: name 't' is not defined 

4,元组的访问与遍历

t = ('python','hello','world')
#根据索引访问元素
print(t[0])

#元组的切片操作
t2 = t[0:3:2]
print(t2)

#元组的遍历
for item in t:
    print(item)

for i in range(len(t)):
    print(i,t[i])

for index,item in enumerate(t,start = 11):
    print(index,'------>',item)

python
('python', 'world')
python
hello
world
0 python
1 hello
2 world
11 ------> python
12 ------> hello
13 ------> world

进程已结束,退出代码0

四、字典

字典类型是根据一个信息查找另一个信息的方式构成了“键值对”,它表示索引用的键的对应的值构成的成对关系。

字典和列表一样,都是可变数据类型。键是不可变数据类型,值可以变。键相同时,值会覆盖。

元组可以作为列表中的键,但列表不可以作为列表中的键。元组是不可以变数据类型,列表是可变数据类型。

字典属于序列,序列中的操作字典同样适用。

1,字典的创建方式

(1)使用{}直接创建字典

        d={key1:value1,key2:value2......}

(2)使用内置函数dict()创建字典

①通过映射函数创建字典

zip(lst1,lst2)

lst1是键,lst2是值

②dict(key1=value1,key2=value2...)

#(1)创建字典
d = {10:'cat',20:'dog',30:'pet',20:'zoo'}
print(d)#当键有重复时,后面键对应的值对前面键对应的值进行了一个覆盖

#(2)zip函数
lst1=[10,20,30,40]
lst2=['cat','dog','pet','zoo','car']
zipobj=zip(lst1,lst2)
print(zipobj)#输出是一个zip对象
#print(list(zipobj))#将zip映射对象转成列表类型

#将映射对象转成字典
d=dict(zipobj)
print(d)

#使用参数创建字典
d=dict(cat=10,dog=20)#左边的是键,右边的是值
print(d)

#元组可以作为字典中的键
t=(10,20,30)
print({t:10})#t是key,10是value

#字典属于序列
print('max:',max(d))
print('min:',min(d))
print('len',len(d))

#字典的删除
del d
print(d)

{10: 'cat', 20: 'zoo', 30: 'pet'}
<zip object at 0x0000021DE56F7648>
{10: 'cat', 20: 'dog', 30: 'pet', 40: 'zoo'}
{'cat': 10, 'dog': 20}
{(10, 20, 30): 10}
max: dog
min: cat
len 2
Traceback (most recent call last):
  File "E:/Pycharm projects/chap4/字典的创建与删除.py", line 31, in <module>
    print(d)
NameError: name 'd' is not defined 

 2,字典元素的取值

字典是没有整数索引值的,不能通过整数索引来取值。

d[key]或d.get(key)

二者之间有区别,如果键key不存在,d[key]会报错,但是d.get(key)可以指定默认值。

3,字典元素的遍历

(1)遍历出key与value的元组:

for element in d.items():

        pass

(2)分别遍历出key和value

for key,value in d.items():

        pass

d = {'hello':10,'world':20,'python:':30}
#访问字典中的元素
#(1)使用d[key]
print(d['world'])
#(2)d.get(key)
print(d.get('hello'))

#字典的遍历
for item in d.items():
    print(item)#由key和value组成的元组

#在使用for循环遍历时,分别获取key,value
for key,value in d.items():
    print(key,'----->',value)

 20
10
('hello', 10)
('world', 20)
('python:', 30)
hello -----> 10
world -----> 20
python: -----> 30

3,字典的相关操作

字典是可变数据类型。下面表格中的d指的是字典名。

字典的方法描述说明
d.keys()获取所有的key数据
d.values()获取所有的value数据
d.pop(key,default)key存在获取相应的value,同时删除key-value对,否则获取默认值
d.popitem()随机从字典中取出一个key-value对,结果为元组类型,同时将该key-value从字典删除
d.clear()

清空字典中所有的key-value操作

d.items()以列表的形式返回可遍历的元组数组
dd = {1001:'李梅',1002:'王华',1003:'张峰'}
print(dd)

#向字典中添加元素
dd[1004]='张丽'#直接使用赋值的方式向字典中添加元素
print(dd)

#获取字典中所有的key
keys=dd.keys()
print(keys)#得到一个对象dict_keys
#将对象转成一个列表类型查看元素
print(list(dd))#转成列表是[]
#将对象转成一个元组类型查看元素
print(tuple(dd))#转成元组是()

#获取字典中所有的值
values=dd.values()
print(list(values))

#如何将字典中的数据转成key-value的形式,以元组的方式进行展现。以列表的形式返回可遍历的元组数组
lst=list(dd.items())
print(lst)

#将列表转成字典
dd=dict(lst)
print(dd)

#d.pop函数通过key取出value,然后将key-value删除
print(dd.pop(1001))
print(dd)

#删除一个不存在的key
print(dd.pop(1008,'不存在'))

#随机删除
print(dd.popitem())
print(dd)

#清空字典中所有的元素
dd.clear()
print(dd)
#python中一切皆对象,每一个对象都有一个布尔值
print(bool(dd))#空字典的布尔值为false

 {1001: '李梅', 1002: '王华', 1003: '张峰'}
{1001: '李梅', 1002: '王华', 1003: '张峰', 1004: '张丽'}
dict_keys([1001, 1002, 1003, 1004])
[1001, 1002, 1003, 1004]
(1001, 1002, 1003, 1004)
['李梅', '王华', '张峰', '张丽']
[(1001, '李梅'), (1002, '王华'), (1003, '张峰'), (1004, '张丽')]
{1001: '李梅', 1002: '王华', 1003: '张峰', 1004: '张丽'}
李梅
{1002: '王华', 1003: '张峰', 1004: '张丽'}
不存在
(1004, '张丽')
{1002: '王华', 1003: '张峰'}
{}
False

空列表的布尔值为False

空元组的布尔值为False

空字典的布尔值为False

4,字典生成式

d = {key:value for item in range}

d = {key:value for key,value in zip(lst1,lst2}

import random
d = {item:random.randint(1,100) for item in range(4)}
print(d)

#创建两个列表
lst1 = [10001,1002,1003]
lst2 = ['王艺艺','李涛','李华']
d = {key:value for key,value in zip(lst1,lst2)}
print(d)

 {0: 78, 1: 16, 2: 41, 3: 94}
{10001: '王艺艺', 1002: '李涛', 1003: '李华'}

五、集合

1,集合的概念

Python中的集合与数学中集合的概念一致

集合是一个无序的不重复元素序列

集合只能存储不可变数据类型,不能存储列表和存储

集合使用{}定义

集合列表字典一样,都是Python中的可变数据类型

2,集合的创建方式

(1)使用{}直接创建集合

s = {element1,element2,...}

(2)使用内置函数set()创建集合

s = set(可迭代对象)

3,集合的删除

del 集合名

#使用{}创建集合
s = {10,20,30,40}
print(s)

s = {}
print(s,type(s))#创建的是字典

#使用set创建集合
s = set()#创建空集合,空集合的布尔值是False
print(s)

s = set('hello world')
print(s)#无序且不重复

s2 = set([10,20,30])#列表中的元素是不可变数据类型
print(s2)

s3 = set(range(1,10))
print(s3)

#集合是序列当中的一种
print('max:',max(s3))
print('min:',min(s3))
print('len:',len(s3))
print('9在集合的当中存在吗?',(9 in s3))
print('9在集合的当中不存在吗?',(9 not in s3))

#集合的删除操作
del s3
print(s3)

{40, 10, 20, 30}
{} <class 'dict'>
set()
{'r', 'o', ' ', 'd', 'w', 'h', 'l', 'e'}
{10, 20, 30}
{1, 2, 3, 4, 5, 6, 7, 8, 9}
max: 9
min: 1
len: 9
9在集合的当中存在吗? True
9在集合的当中不存在吗? False
Traceback (most recent call last):
  File "E:/Pycharm projects/chap4/集合的创建与删除.py", line 30, in <module>
    print(s3)
NameError: name 's3' is not defined

进程已结束,退出代码1 

 4,集合的相关操作

操作符描述
A&B交集
A|B并集
A-B差集
A^B补集
A = {10,20,30,40,50}
B = {30,50,88,76,20}
print(A&B)
print(A|B)
print(A-B)
print(A^B)

{50, 20, 30}
{40, 10, 76, 50, 20, 88, 30}
{40, 10}
{10, 88, 40, 76}

5,集合的增删改

s.add(x)若x没有在集合中,增加x到集合中
s.remove(x)若x在集合中,删除x;若x没有在集合中,程序报错
s.clear()清空集合中所有元素
A = {10,20,30,40,50}
A.add(100)
print(A)
A.remove(20)
print(A)
A.clear()
print(A)

{100, 40, 10, 50, 20, 30}
{100, 40, 10, 50, 30}
set()

6,集合的遍历

for item in 集合:

        print(item)

for index,item in enumerate(集合)or(集合,start=xxx)

        print(index,item)

这里的index是序号,不是索引,序号可以指定默认初始值,默认从0开始。

A = {10,20,30,40,50}
for item in A:
    print(item)

for index,item in enumerate(A,start=10):
    print(index,'------>',item)

40
10
50
20
30
10 ------> 40
11 ------> 10
12 ------> 50
13 ------> 20
14 ------> 30

进程已结束,退出代码0

 7,集合的生成式

A = {i for i in range(1,11}

其中,range()表示循环次数

A = (i for i in range(1,11))
print(A)#A是一个集合对象
#集合列表化
print(list(A))

<generator object <genexpr> at 0x000001AA72396448>
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 

六、几种数据类型的区别

数据类型序列类型元素是否可重复是否有序定义符号
列表list可变序列可重复有序[]
元组tuple不可变序列可重复有序{}
字典dict可变序列Key不可重复无序{key:value}
集合set可变序列不可重复无序{}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

栗知言

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

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

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

打赏作者

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

抵扣说明:

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

余额充值