python之字符串、列表、字典和元组

python学习第一步了解四大数据结构,他们分别为list、tuple、dict、set,初级目标是了解基本用法,进阶学习是了解底层如何实现。BUT 在这之前

在学习四大数据结构之前先来回顾下python的基本数据类型,简单回顾下数字、字符串、布尔类型三种。

基本数据类型

知其然更要知其所以然,语言的对比学习往往会让人更为深刻。python较C++更为简洁,比如声明一个变量,C++中常用的就是 数据类型 变量名,如下:
int age = 20;
python中声明的变量是直接: 变量名 = 变量值,如下:
age = 20

数字

C系语言中的整数类型有很多,如int,long,long long等,使用时应明确标出。
python中不需要明确类型,并且没有限制长整数的数值大小,如果发生溢出,会自动转换为长整数。python中的整数类型都是int,没有long

1
2
3
age = 20
print(type(age)) #查看数据类型的方法
<class 'int'> #运行结果

字符串

python中加了引号的都是字符串,而且多种形式的引号单独使用没有差别,只有在引号中嵌套引号才有些许差别,三引号的作用时换行和注释

1
2
3
4
5
6
7
8
9
10
11
name = 'wwp' #单引号
name = "wwp" #双引号
name = '''wwp''' #三引号
name = "What's ur name?" #单双引号混用
name = '''
第一行
第二行
第三行
'''
#pyhton中的字符串可以相加(字符串拼接)和相乘(字符串复制)
name = 'wwp'*3 #字符串和数字相乘表示输出几遍,‘wwpwwpwwp’

字符串中其他的常用操作如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
name = "ada"
name.title()#首字母大写显示每个单词
name.upper()#全部大写
name.lower()#全部小写
#\n 换行符
#\t制表符(大空格)
name.rstrip()#暂时删除变量末尾(右边right)的空格
print(name)#依然有空格
#想要永久删除空格就必须将删除后的结果存回到变量中
name.lstrip()#暂时删除变量前面(左边left)的空格
name.strip()#暂时删除变量两端的空格
age = 23
str(age)#把非字符串转化为字符串

布尔类型

true & flase

列表LIST

  • List是由一系列特定顺序排列的元素组成—–有序的(与set相对)
  • 用[]表示列表,并用逗号分隔其中的元素,列表的名称常定义为复数,
  • 适用于存储在程序运行期间可能变化的数据集,是可以修改的—-元素可变(与tuple相对)
  • 容纳python的任何对象(与字典相对)

访问列表元素

索引访问,下标从0开始。(==C++数组和vector也是索引访问,还记得数组和链表及vector的区别吗==)

注意:python访问最后一个列表元素,使用索引-1,返回列表的最后一个元素,常用于不知道列表长度的情况下,当然倒数第二个元素类推-2,-3,-4(不过列表为空时不能这样使用,会出错)

修改、增加和删除元素

修改元素:给列表中的某元素赋新值,重新print即修改

增加元素

  1. 列表末尾添加元素

    1
    2
    3
    names = ['Mary', 'Tom'] 
    names.append('Jack')
    print(names)

python中可以使用append动态的创建列表,如先创建一个空列表,再使用一系列的append()语句添加元素,类似建立一个空的vector,然后不断的push_back()元素

​ 2.列表中插入,insert(索引值,新元素值)可以在任何位置添加新元素

删除元素

  1. 根据索引删除元素,元素后期不再使用

del names[0]

​ 2.删除列表末尾的元素,并继续使用存入变量,names.pop(),类似栈的弹出

​ 3.删除任何位置的元素,并存入变量,names.pop(索引)

​ 4.根据值删除元素,names.remove(‘Mary’),remove只是删除第一个出现的值,如果某元素重复出现多次,应该循环判断是否删除完毕

组织列表

  1. 永久性排序,不可恢复,names.sort(),/names.sort(reverse=True)逆序
  2. 临时显示特定排序,不影响列表的原始顺序,print(sorted(names))
  3. 反转列表的排列顺序,names.reverse(),逆序,如果需要恢复,再次reverse
  4. 求列表长度len(names)

数值列表

  1. range(start,end)函数,输出从start开始的数字,到end结束(不包括end)
  2. list(range(start, end))函数,把range的结束直接转换为列表
  3. range(start, end, step)可以指定步长增加直到end

切片(部分元素)

  1. 指定开始和结尾索引,在结尾索引前停止(不包括结尾处)
  2. 没有指定开始索引代表从列表头开始,没有制定结束索引,代表从列表尾结束
  3. 复制列表,同时省略起始索引

元组tuple

不可修改的不可变的列表,使用圆括号()表示,同样使用索引访问元组,即可查询不可修改的列表

字典dict

  • 花括号表示{key:value},元素是key与value的对应关系组,通过key访问value
  • key键不能重复,但是值可以重复
  • 字典中的key键是不可变的,无法修改的,但是值value是可变的可修改的,可以是任何对象
  • 无序存储,python对key进行哈希数字运算,根据计算结果决定value的地址,所以是无序,所以key需要是能被哈希的,即必须是不可变类型,数字字符串元组
1
2
3
4
5
6
7
8
9
10
11
12
13
# 还记得C++的map吗
# 添加单个键值对
students = {}
students['Mary'] = 5 #增加一个键值对Mary-5
# 添加多个键值对
# 删除元素
del students['Mary']#删除时要指定字典名和要删除的键
# 遍历字典
for key,value in students.items()
# 遍历所有的键
for name in students.keys():#方法key()可以省略,但是加上更好,key返回一个包含字典中所有键的列表
# 遍历所有的值
for age in students.values():#方法values()返回一个包含字典中所有值的列表

集合set

  • 花括号表示{},无序的,不重复的,任意的元素,是不是跟C++的set很像
  • 一般用set去掉重复元素
  • 集合不能切片也不能使用索引,毕竟是无序的

总结:每个数据结构应该处理哪些数据,应用在哪些场景中

休息一下,喝杯咖啡,继续创作