序列

序列是Python中最基本的数据结构。序列用于保存一组有序的数据。所有数据在当前序列中都有唯一的索引,并且序列中的数据会按添加的顺序来分配索引。
数据的结构是指计算机存储数据的方式。
序列的分类:
可变序列(序列中的元素可以改变),如 list 列表,dict字典 ,set 集合。
不可变序列(序列中的元素不可以改变,如字符串strings ,元组tuple。

列表

列表是Python中的一个对象。列表可以保存多个有序的数据,用来存储对象的对象。

 #[]  空列表   list
list2 = []
list1 = [1, 'python', True, None]
print(list1, type(list1))
[1, 'python', True, None] <class 'list'>
# 增删改查
print(len(list1))   # 最大索引值+1

print(list1[-3])
4

切片

切片是从现有列表中获得一个子列表。通过切片来获取指定的原素。
语法[开始:结束:步长] [3:9:1]左闭右开型,包含左边不包含右边结束数。
起始位置与结束位置可以不写,如果省略结束位置,会从当前位置开始一直截取到最后;如省略开始位置,则会从第一个元素截取到最后,但不包含最后一个元素。如果开始与结束位置都省略,则会取所有列表中的元素。

步长是一个不为0的正或负整数

list1 = ['刘亦菲', '周慧敏', '范冰冰', '周杰伦', '江疏影', '薛之谦', '点点']
# 切片语法:  list[起始位置的索引:结束位置的索引:步长]   左闭右开型

list2 = list1[:]  # 省略的写法:0 :包括最后:1 开始与结束位置都省略,则会取所有列表中的元素
['点点', '薛之谦', '江疏影', '周杰伦', '范冰冰', '周慧敏', '刘亦菲']

list2 = list1[:3:2]#如省略开始位置,则会从第一个元素截取到最后,但不包含最后一个元素
['刘亦菲', '范冰冰']

list2 = list1[3:]#省略结束位置,会从当前位置开始一直截取到最后
['周杰伦', '江疏影', '薛之谦', '点点']

list2 = list1[-5:-3:1] #从右向左第5个 :从右向左第3 个:STEP为1,STEP为正数从左向右取值,STEP为负正数,从右向左取值
['范冰冰', '周杰伦']
list2 = list1[-3:-5:-1]#STEP为负正数,从右向左取值
['江疏影', '周杰伦']
list2 = list1[-5:-3:-1]#从右向左第5个 :从右向左第3 个,STEP为负正数,从右向左取值。超出定义的区间,得到空值。
[]
list2 = list1[::-1] #开始与结束位置都省略,则会取所有列表中的元素,通过设置步长的正反方向来确定倒序与正序。
['点点', '薛之谦', '江疏影', '周杰伦', '范冰冰', '周慧敏', '刘亦菲']

列表通用操作

  • 和 ×。加+ 可以将两个列表合并成一个列表。× 乘是指单个重复指定次数,两个列表不能相乘。
    in 和not in ,要来检查指定元素是否在列表中。
    len()是获得列表元素的数量。
    max(),min(),
    list. index(x[,start[,end]])第一个参数提定元素在列表中位置,第二个表示查找的起始位置,第三个表示查找的结束位置。
    list.count(x)
# 加法和乘法操作
a = [1, 2, 3] + [4, 5]
print(a)
[1, 2, 3, 4, 5]

a = [1, 2, 3] * 3
print(a)
[1, 2, 3, 1, 2, 3, 1, 2, 3]
# in    not in
list1 = ['刘亦菲', '周慧敏', '范冰冰', '周杰伦', '江疏影', '薛之谦', '点点', '点点']
print('点点' in list1)
True
a = [1, 2, 3]
print(max(a))
3
print(list1.index('周杰伦'))
3
print(list1.count('点点'))
2

增删改查 (python)
#通过索引修改元素

list1 = ['刘亦菲', '周慧敏', '范冰冰', '周杰伦', '江疏影', '薛之谦', '点点', '点点']
list1[-1] = 'Amy' #-1表示从最右侧替换
print(list1)
['刘亦菲', '周慧敏', '范冰冰', '周杰伦', '江疏影', '薛之谦', '点点', 'Amy']
# del 关键字删除
del list1[-1]-1表示从最右侧删除
print(list1)
['刘亦菲', '周慧敏', '范冰冰', '周杰伦', '江疏影', '薛之谦', '点点']

# 列表使可变类型
# 通过切片来做增删改查
list1 = ['刘亦菲', '周慧敏', '范冰冰', '周杰伦', '江疏影', '薛之谦', '点点', '点点']

list1[0:3] = 'abcd'
print(list1)
['a', 'b', 'c', 'd', '周杰伦', '江疏影', '薛之谦', '点点', '点点']
list1[0:3] = 1,2,3,4
print(list1)
[1, 2, 3, 4, '周杰伦', '江疏影', '薛之谦', '点点', '点点']

#当设置了步长的时候,序列中元素的个数必须和切片中的元素个数一致
list1 = ['刘亦菲', '周慧敏', '范冰冰', '周杰伦', '江疏影', '薛之谦', '点点', '点点']
list1[::2] = ['cheney']#从0位开始算,按STEP2为改写,应有4 个改写值,这只有一个元素,不一致。
print(list1)
Traceback (most recent call last):
  File "C:/Users/benson.gu/PycharmProjects/pythonProject3/pythonlearn1/pythonlearning records/list列表.py", line 73, in <module>
    list1[::2] = ['cheney']
ValueError: attempt to assign sequence of size 1 to extended slice of size 4

list1[::2] = ['cheney', 'jerry', 'amy', '居然']
print(list1)
['*cheney*', '周慧敏', *'jerry'*, '周杰伦', '*amy'*, '薛之谦', '*居然*', '点点']

#改写方式删除
list1 = ['刘亦菲', '周慧敏', '范冰冰', '周杰伦', '江疏影', '薛之谦', '点点', '点点']
list1[1:3] = []
print(list1)
['刘亦菲', '周杰伦', '江疏影', '薛之谦', '点点', '点点']

# 不可变类型
str1 = 'abcdef'
str1[1] = 'p'
    str1[1] = 'p'
TypeError: 'str' object does not support item assignment
ABCDEF

str2 = str1.upper()
print(str2)
ABCDEF
print(id(str1), id(str2))# Id值 不同
1689828041872 1689829623208

# 强转类型  int  float  list  str

列表中的方法

三个添加方法:
# 1. 向列表中添加一个元素 append() 加到列表最后
list1 = ['刘亦菲', '周慧敏', '范冰冰', '周杰伦', '江疏影', '薛之谦', '点点', '点点']
list1.append('amy')
print('修改后', list1)
修改后 ['薛之谦', '范冰冰', '点点', '点点', '江疏影', '周杰伦', '周慧敏', '刘亦菲']

#2. insert()list1 = ['刘亦菲', '周慧敏', '范冰冰', '周杰伦', '江疏影', '薛之谦', '点点', '点点']向列表中指定的位置插入一个元素,两个参数,第一个使插入的位置,第二个是插入的元素
list1 = ['刘亦菲', '周慧敏', '范冰冰', '周杰伦', '江疏影', '薛之谦', '点点', '点点']
list1.insert(2, 'amy')
print('修改后', list1)
修改后 ['刘亦菲', '周慧敏', 'amy', '范冰冰', '周杰伦', '江疏影', '薛之谦', '点点', '点点']

# 3. extend()使用新的列表来扩展当前列表
list1 = ['刘亦菲', '周慧敏', '范冰冰', '周杰伦', '江疏影', '薛之谦', '点点', '点点']
list1.extend(['cheney', 'jerry'])
print('修改后', list1)
修改后 ['刘亦菲', '周慧敏', '范冰冰', '周杰伦', '江疏影', '薛之谦', '点点', '点点', 'cheney', 'jerry']

# 清空列表  clear()
list1.clear()
print('修改后', list1)
修改后 []

# 删除操作
# pop() 根据索引删除并返回执行的元素, 如果不传递索引,默认删除最后一个
list1 = ['刘亦菲', '周慧敏', '范冰冰', '周杰伦', '江疏影', '薛之谦', '点点', '点点']
list1.pop(-3)
print('修改后', list1)
修改后 ['刘亦菲', '周慧敏', '范冰冰', '周杰伦', '江疏影', '点点', '点点']

# remove() 删除指定的元素
list1 = ['刘亦菲', '周慧敏', '范冰冰', '周杰伦', '江疏影', '薛之谦', '点点', '点点']
list1.remove('点点') #相同值删除右侧第一位
print('修改后', list1)
修改后 ['刘亦菲', '周慧敏', '范冰冰', '周杰伦', '江疏影', '薛之谦', '点点']

# 反转列表reverse()
list1 = ['刘亦菲', '周慧敏', '范冰冰', '周杰伦', '江疏影', '薛之谦', '点点', '点点']
list1.reverse()
print('修改后', list1)
修改后 ['点点', '点点', '薛之谦', '江疏影', '周杰伦', '范冰冰', '周慧敏', '刘亦菲']

# sort()排序一起结合使用 默认是正序排列
list1 = ['刘亦菲', '周慧敏', '范冰冰', '周杰伦', '江疏影', '薛之谦', '点点', '点点']
list1.sort()
print('修改后', list1)
修改后 ['刘亦菲', '周慧敏', '周杰伦', '江疏影', '点点', '点点', '范冰冰', '薛之谦']
list1.sort(reverse=True)
print('修改后', list1)
修改后 ['薛之谦', '范冰冰', '点点', '点点', '江疏影', '周杰伦', '周慧敏', '刘亦菲']

for 循环与range 函数

#for循环是遍历: 指的时把列表中的元素取出来
list1 = ['刘亦菲', '周慧敏', '范冰冰', '周杰伦', '江疏影', '薛之谦', '点点', '点点']
#print(list1[0])
#print(list1[1])
#print(list1[2])
#print(list1[3])
#print(list1[4])
#print(list1[5])
i = 0
while i < 8:
    print(list1[i])
    i += 1
 刘亦菲 周慧敏 范冰冰 周杰伦 江疏影 薛之谦 点点 点点 

#for循环语法:  for  变量  in  遍历的序列:代码块
#在for循环中,对遍历的元素做操作,只限于for循环之内,代码运行出for循环,那么原来的修改不做保存。    
list2 = [1, 2, 3, 4, 5]
list3 = []
for i in list2:  
    list3.append(i)
print(list3)
[1, 2, 3, 4, 5]

#range()函数#左闭右开
#range()#左闭右开

print(list(range(9)))#左闭右开,默认从低到高
[0, 1, 2, 3, 4, 5, 6, 7, 8]

print(list(range(8,-1,-1)))左闭右开,默认从低到高,可以通过设负的STEP改为从高到低
[8, 7, 6, 5, 4, 3, 2, 1, 0]

for i in range(0, 9, 3):#左闭右开
    print(i,end=' ')#左闭右开
0 3 6 

Homework

#将列表[1, 2, 3, 4, 5, 6] 改为倒序

list1 = [1, 2, 3, 4, 5, 6]
list2 = []
for i in list1:
    list2.insert(0, i)
print(list2)
[6, 5, 4, 3, 2, 1]

或
list1 = []
for i in range(6,0,-1): #由高至低遍历
    list1.append(i)
print(list1)

#2. 给 用户9次机会 猜1 – 10 个数字随机来猜数字。如果随机的数字和用户输入的数字一致则表示正确,如果不一致则表示错误。最终结果要求用户怎么也猜不对

list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
i = 1
list2=[]
while i < 10:
    i += 1
    num = int(input('请输入1-10的数字'))
    if  num < 1 or num > 10:
        print('对不起,您猜错了')
        continue
    res = list2.append(num)
    while list2.count(num)>1: # 解决重复输入不能从list1中remove程序报错。
        print('对不起,您猜错了')
        break
    else:
        list1.remove(num)
        print("对不起,您猜错了")
else:
    print('正确答案是%s' % list1[0])

#3.1 有两个列表 lst1 = [11, 22, 33] lst2 = [22, 33, 44]获取内容相同的元素

lst1 = [11, 22, 33]
lst2 = [22, 33, 44]
#方法1
print(set(lst1)&set(lst2))
{33, 22}
#方法2
for i in lst1:
    for j in lst2:
        if i == j:
            print(i,end=' ')
22 33  

#4. 现在有8位老师,3个办公室,要求将8位老师随机的分配到三个办公室中

  1. 创建一个列表装8位老师
  2. 创建一个列表装三个办公室
  3. 遍历老师,随机出办公室,讲老师添加到办公室中(可能会出现某个办公室为空)
  4. 打印办公室
import random
teachers = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']
offices = [[], [], []]
for teacher in teachers:
    # random.randint随机数字
    # random.choices()随机列表中的元素
    num = random.randint(0, 2) #此处用0,2,是因为列表有三个空需要填。
    offices[num].append(teacher)
else:
    print(offices)

#3.2 现在有8位老师,3个办公室,要求将8位老师随机的分配到三个办公室中, 要求每个办公室都要有人
#1. 随机出来,做判断,有空则重新生成
#2. 先随机出来三位老师放到三个办公室里(并从原列表中移除),再随机放入其他的老师 。

import random
teachers = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']
offices = [[], [], []]

num = random.sample(teachers, 3)
offices[0].append(num[0])
offices[1].append(num[1])
offices[2].append(num[2])
teachers.remove(num[0])
teachers.remove(num[1])
teachers.remove(num[2])

for teacher in teachers:
    # random.randint随机数字
    # random.choices()随机列表中的元素
    num2 = random.randint(0, 2)
    offices[num2].append(teacher)
else:
    print(offices)

本文地址:https://blog.csdn.net/weixin_50587406/article/details/111072133