1.输出与字符串

print( x, end=" " )   #end=" "会输出一个空格但不会换行
print( y, end=" " )
print( y, end="" )    #end=""啥都不会输出 也不会换行
str='123456789'
print(str) #输出字符串

字符串的切片:
print(str[0:-1])   #输出第一个到最后一个(不包括最后一个)的所有字符, 即"取头舍尾" 
语法 =>  strvar[::]  [开始索引:结束索引:间隔值]
    (1)[开始索引:]  从开始索引截取到字符串的最后
    (2)[:结束索引]  从开头截取到结束索引之前(结束索引-1)
    (3)[开始索引:结束索引]  从开始索引截取到结束索引之前(结束索引-1)
    (4)[开始索引:结束索引:间隔值]  从开始索引截取到结束索引之前按照指定的间隔截取字符
    (5)[:]或[::]  截取所有字符串
间隔值的用法example:
   res = strvar[-3:-10:-2]
输出的字符串res中的元素在strvar中的下标将会是将会是 -3, -5(-3-2), -7(-5-2), -9(-7-2)

#字符串里所有元素全都是字符串类型的  所以如果要计算的话--->
a=str[0]+str[1] #会输出12 必须强制转换类型
a=int(str[0])+int(str[1])

想要原型化输出字符串;在"前加上r 如果
strvar = "D:\mcl\shousi\.minecraft\versions\乌托邦探险之旅3.0优化版"
print(strvar)会出现乱码
所以我们需要:strvar = r"D:\mcl\shousi\.minecraft\versions\乌托邦探险之旅3.0优化版"

字符串的格式化:
%d %-2d可以将整型数向左对齐,否则默认向右对齐
%s 字符串,strvar = "%s爱喝尿"%("黄乘明"),括号里的字符串同样要加引号
%f 浮点数占位符,%.2f 是保留小数点后两位 自动四舍五入
strvar1 = "%s昨天在%s鹿关被发现了,罚款%.2f元人民币,还做了%-2d个俯卧撑"%("黄乘明", "宿舍", 1145.14,5)
print(strvar1)
输出结果:黄乘明昨天在宿舍鹿关被发现了,罚款1145.14元人民币,还做了5 个俯卧撑
当不知道用什么占位符的时候无脑使用%s

字符串不能像c语言一样编辑 也就是说str[0]=666这样的语句会报错
这个操作在列表里可以实现

2.列表

tips: Iterable可迭代性数据:1.容器类型数据 2.range对象 3.迭代器

#创建列表的方式:把逗号分隔的不同的数据项使用方括号括起来
list1 = ['Google', 'Runoob', 1997, 2000]
list2 = [1, 2, 3, 4, 5 ]
list3 = ["a", "b", "c", "d"]
list4 = ['red', 'green', 'blue', 'yellow', 'white', 'black']

#列表在打印超过一个元素的时候方括号也会出现
list = ['Google', 'Runoob', "Zhihu", "Taobao", "Wiki"]
print ("list[1]: ", list[1])
#结果:list[1]:  Runoob
print ("list[1:-2]: ", list[1:-2])
#结果:list[1:-2]:  ['Runoob', 'Zhihu']

**操作列表的方式 ** 
list = ['Google', 'Runoob', 1997, 2000]
#直接修改数据
list[2] = 2001 #更新后list[3]=1997

#append增添
list1 = ['Google', 'Runoob', 'Taobao']
list1.append('Baidu')

#迭代追加数据
lis = ['Google', 'Runoob', 'Taobao']
tup = (1, 2, 3)
lis.extend(tup)
print(lis)
#运行结果是:['Google', 'Runoob', 'Taobao', 1, 2, 3]

#insert插入
fruits.insert(1, 'pear')  # 将'pear'插入列表作为第2个元素(索引为1)

#del删除
list = ['Google', 'Runoob', 1997, 2000]
del list[2]
#通过切片同时删除多个元素:
del list[1: 3]

#remove 通过给出的值来删除,如果有多个相同元素 默认删除第一个
fruits.remove('grape')   # 删除列表中的'grape'元素

#pop 返回的是被删除的元素 指定下标 如果没有索引会直接移除最后那个
#速度比remove快
list = ['Google', 'Runoob', 1997, 2000]
res = list.pop(1)
print(res)
print(list)
#运行结果:
Runoob
['Google', 1997, 2000]

#列表还支持拼接操作
squares = [1, 4, 9, 16, 25]
squares += [36, 49, 64, 81, 100]

#列表通过切片一次修改多个值
切片修改时等号右边的必须是 可迭代性数据:1.容器类型数据  2.range对象  3.迭代器 
listvar = ["啥比", "黄乘明", "卧槽", "尼玛"]
listvar[1: 3] = ["尼玛", "斯了"]
print(listvar)
#运行结果是['啥比', '尼玛', '斯了', '尼玛']
#当带有步长一次修改多个值时必须切多少个改多少个 否则会报错

**有关列表的其他函数**
#返回列表元素个数
len(list)
#返回列表元素最大值
max(list)
#返回列表元素最小值
min(list)
#将元组转换成列表
list(seq)


列表补充函数

#index 获取某个值在列表中的索引
lst = ["黄乘明", "我", "操", "你", "马", "马"]
res = lst.index('马')
print(res)
#输出结果: 4
#当要指定范围时:
res = lst.index('我', 1, 5)
print(res)

#count 计算某个元素出现的次数
lst = ["黄乘明", "我", "操", "你", "马", "马"]
res = lst.count("马")
pirnt(res)
#运行结果: 2
需要注意的是字符串中的count函数可以指定查找范围和结束范围
而列表中的count函数不能做到

#sort 对列表排序
lst = [-90, -100, -1, 90, 78]
#从小到大排序
lst.sort()
#从大到小排序
lst.sort(reverse = True)
运行结果:
[-100, -90, -1, 78, 90]
[90, 78, -1, -90, -100]
当列表里都是字符串的时候使用sort函数会按照ascii编码来排序

#reverse 反转列表
lst = [1, 2, 'a', '黄乘明', '易烊千玺']
lst.reverse()
#运行结果:['易烊千玺', '黄乘明', 'a', 2, 1]

3.元组

#python的元组和列表类似,定义一个元组需要括号和逗号
#但元组的元素不能被修改(这点类似字符串)
#定义一个元组
tup1 = ('Google', 'Runoob', 1997, 2000)
#当元组中只包含一个元素时需要在元素后面添加逗号 , ,否则括号会被视为运算符
tup(50,) #type(tup50)
#元组中的元素值是不允许删除,但可以使用del语句来删除整个元组
tup = ('Google', 'Runoob', 1997, 2000)
del tup
#元组还能被截取
#截取从第二个开始后的所有元素
tup[1:]
#截取从第二个开始到第四个元素
tup[1:4]

#列表本身的元素是不能被修改的,但当列表内包含二级容器时可以修改容器内部的元素
tup = (1, 2, 3, 4, [10, 11, 12])
tup[-1][-1] = 13
print(tup) 
#运行结果是(1, 2, 3, 4, [10, 11, 13]), 修改成功!

4.字典

字典的每个键值 key=>value 对用冒号 : 分割,每个对之间用,分割,整个字典包括在花括号 { } 中

#定义一个空字典
emptyDict = {}
#访问字典里的值
tinydict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
tinydict["Name"]
#在一个字典里添加键值
tinydict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
tinydict['Age'] = 8
tinydict['school']= '一坨屎'

#可以用字典来存储一个学生的各项信息,然后再把字典嵌套进列表,这样就能存储很多人的信息了
stu_info=[]    #定义一个空列表
def add_stu():
    new_info={}   #定义一个空字典
    new_info['num'] = input('请输入学号')
    new_info['name'] = input('请输入姓名')
    new_info['sex'] = input('请输入性别')
    global stu_info       #申明全局变量
    stu_info.append(new_info)    #将字典嵌套进列表
    stu_info = sorted(stu_info,key = lambda x:x['num'])
    #排序

5.集合

集合(set)是一个无序的不重复元素序列。
set() 函数也可以用于将其他数据结构,如列表或元组转换为集合,这在去除重复元素时非常有用。

#实例
set1 = {1, 2, 3, 4}  
#创建一个空集合
empty_sict = set()    
#如果用empty_sict = {}就变成创建一个字典了

s.add( x ) 或 s.update( x )   #添加元素 后者可以添加列表,元组,字典
#注意 由于集合内的元素必须是hashable,也就是不能变化的,所以列表, 字典并不能作为集合的元素. 
#而update函数也并不是简单的把列表和字典嵌套到集合里作为集合的一个元素,因为这样是不可能的 
实际update是这样工作的
s = {1, 2, 3}
listvar = [4, 5, 6]
s.update(listvar)
print(s)  #结果会是{1, 2, 3, 4, 5, 6}
如果update的是一个字典dictvar的话, 那么字典的键会添加到集合s里

s.remove( x ) 或 s.discard( x ) #移除元素 后者移除集合中不存在的元素时不会报错

# 假设我们有一个列表
my_list = [1, 2, 3, 2, 4, 4, 5]

# 使用set()函数将列表转换成集合
my_set = set(my_list)

# 打印集合,重复的元素会被自动去除
print(my_set)  # 输出可能是 {1, 2, 3, 4, 5}