欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Python序列和列表的实例操作

程序员文章站 2022-06-17 16:06:39
List item...

序列

序列是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

相关标签: python