Python——基本数据类型(一):列表

一.序列

基本概念

  • 序列是Python中最基本的一种数据结构。序列用于保存一组有序的数据,所有的数据在序列当中都有一个唯一的位置(索引)并且序列中的数据会按照添加的顺序来分配索引
  • 数据结构指计算机中数据存储的方式

序列的分类

  • 可变序列(序列中的元素可以改变):例如 列表(list)
  • 不可变序列(序列中的元素不能改变):例如 字符串(str)元组(tuple)

二.列表

  • 列表是Python中的一个对象
  • 列表的作用
    (1)列表中可以保存多个有序的数据
    (2)列表是用来存储对象的对象
lsc = ['Susan', 'Female', 19, [85, 74, (99, 89)]]
# 列表中的元素可以是字符串、数字、数组、元组

1.切片

  • 切片是指从现有列表中获得一个子列表
  • 通过切片来获取指定的元素
  • 语法: 列表[起始 : 结束 : 步长]
  • 通过切片获取元素时,会包括起始位置的元素,不会包括结束位置的元素
  • 起始位置和结束位置的索引可以不写
    (1)如果省略结束位置, 则会从当前的开始位置一直截取到最后
    (2)如果省略开始位置, 则会从第一个元素截取到结束的元素,但是不包括结束的元素
    (3)如果开始位置和结束位置都省略, 则则会从第一个元素开始截取到最后一个元素
  • 步长表示每次获取元素的间隔,默认是1(可以省略不写)
  • 步长不能是0,但可以是是负数

字符串可以进行切片

# 字符串序列类型
s = 'Hello World!'
print(s[6:8])       # 根据序号[6:8]切片,输出不包括结束序号的字符'Wo'
print(s[:5])        # 从起点到序号为5的位置切片,不包括5,输出'Hello'
print(s[6:])        # 从序号6向后到字符串结束切片,输出'World!'
print(s[-3:-1])     # 负向索引,不包含右边界元素,输出'ld'
print(s[6:-1])      # 混用正负索引,输出'World'
print(s[::])        # 从字符串开始到结束进行切片,输出'Hello World!'
print(s[::-1])      # 按步长为-1进行切片,输出'!dlroW olleH'
print(s[::2])       # 步长为2,输出序号为偶数的元素,输出'HloWrd'

列表也可以进行切片

scores = ['李明', 84, 80, 95, 88, 96, 76, 65, 85, 98, 55]
print(scores[5:])       # 从序号5到序列结束的元素,输出[96, 76, 65, 85, 98, 55]
print(scores[1:-1])     # 混用正负索引,输出[84, 80, 95, 88, 96, 76, 65, 85, 98]
print(scores[1::2])     # 步长为2,隔一个取一个数据,输出[84, 95, 96, 65, 98]
print(max(scores[1:]))  # 切片返回除序号0的列表,max返回其最大值
print(sum(scores[1:]))  # 利用sum()函数对切片获取的序列求和,输出822

2.列表的相关操作

(1)利用索引取出列表中的元素

# 字符串序列
s = 'Hello World!'
print(s[4])               # 按序号正向索引,返回序号为5的字符 'o'
print(s[-1])              # 按逆向序号索引,返回最后一个字符  '!'
# 序列类型 — 列表
scores = ['李明', 84, 80, 95, 88, 76, 65, 85, 98, 55]
print(scores[0])          # 按序号正向索引,返回序号为0的元素'李明'
print(scores[4])          # 按序号正向索引,返回序号为3的元素88
print(scores[-1])         # 按逆向序号索引,返回倒数第1个元素55
print(scores[-3])         # 按逆向序号索引,返回倒数第3个元素85
# 序列类型 — range
r = range(10)             # 获得0,1,2,3,4,5,6,7,8,9的序列对象
print(r[3])               # 按序号正向索引,返回序号为3的元素  3
print(r[-3])              # 按逆向序号索引,返回倒数第3个元素  7

(2)查看列表的长度

scores = ['李明', 84, 80, 95, 88, 76, 65, 85, 98, 55]
print(len(scores))      # 10

(3)创建列表

  • 创建空列表:
list = []
print(list)    # []
  • 创建特定序列的列表
# 创建1-10的数字列表:
list_1 = list(range(1, 11))
print(list_1)    # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# 创建连续的字符串
teachers = ['teacher_'+str(i) for i in range(1, 9)]
print(teachers)    # ['teacher_1', 'teacher_2', 'teacher_3', 'teacher_4', 'teacher_5', 'teacher_6', 'teacher_7', 'teacher_8']

(4)列表常用操作(通用)

函数/符号作用
+ 和 *+ 可以将两个列表拼接成一个列表
* 可以将列表重复指定的次数 (注意两个列表不能够做乘法,要和整数做乘法运算)
in 和 not inin用来检查指定元素是否在列表当中
not in 用来检查指定元素是否不在列表当中
len()获取列表中元素的个数
max()获取列表中最大值
min()获取列表中最小值
list.index(x[, start[, end]])第一个参数 获取指定元素在列表中的位置
第二个参数 表示查找的起始位置
第三个参数 表示查找的结束位置
list.count(x)统计指定元素在列表中出现的个数
ls = ['a', 'baa', 'bcde', 'de']
print(max(ls))            # 比较字符串中各字符的unicode值,d最大,输出de
print(min(ls))            # 比较字符串中各字符的unicode值,a最小,输出a
print(max(ls, key=len))   # 比较列表中各字符串长度,bcde最大
print(min(ls, key=len))   # 比较列表中各字符串长度,a最小,输出a
print(ls.count('a'))      # 计算列表中'a'出现的次数:1
num = ['01', '9', '10', '5']
print(len(ls))            # 计算列表长度:4
print(max(num))           # 比较列表中各字符串长度,'9'最大
print(max(num, key=int))  # 按各元素转整型后比较,'10'转整型为 10,最大

(5)列表的方法

  • append:列表最后一位插入数据
list = [1, 2]
list.append(3)
print(list)    # [1, 2, 3]
  • insert:列表中间插入数据
list = [1, 2, 3, 4, 5]
list.insert(2, 'hello')
print(list)    # [1, 2, 'hello', 3, 4, 5]
  • pop:根据索引删除元素
list = [1, 2, 3, 4, 5]
ls = list.pop(1)
print(list)    # [1, 3, 4, 5]
print(ls)      # 2
  • remove:列表删除指定的元素
list = [1, 2, 3, 4, 5]
list.remove(3)
print(list)    # [1, 2, 4, 5]
# 若元素不存在则会报错
  • sort:列表正逆排序
student_name = ['Aardvark', 'book',  'coke', 'Dad', 'dog', 'Television', 'zappy', 'Zippy']
student_name.sort()
print(student_name)
# ['Aardvark', 'Dad', 'Television', 'Zippy', 'book', 'coke', 'dog', 'zappy']
student_name.sort(key=str.lower)
print(student_name)
# ['Aardvark', 'book', 'coke', 'Dad', 'dog', 'Television', 'zappy', 'Zippy']

参数key可以指定根据元素中指定的项进行排序

# 参数key可以指定根据元素中指定的项进行排序
name_age = [['Ana', 20], ['Bob', 18], ['Jack', 23], ['Tom', 21]]
name_age.sort()
print(name_age)
# [['Ana', 20], ['Bob', 18], ['Jack', 23], ['Tom', 21]]
name_age.sort(key=lambda x : x[1])
print(name_age)
# [['Bob', 18], ['Ana', 20], ['Tom', 21], ['Jack', 23]]

三.应用练习

  1. 现在有 a = [1,2,3,4,5,6] 不通过函数的形式实现列表的反转([6,5,4,3,2,1]) 并写出推导过程
a = list(range(1, 7))
print(a[::-1])
print(sorted(a, reverse=True))
  1. 给 用户9次机会 猜1 - 10 个数字随机来猜数字。如果随机的数字和用户输入的数字一致则表示正确,如果不一致则表示错误。最终结果要求用户怎么也猜不对
computer_choice = list(range(1, 11))
player = int(input('请输入1-10任意一个数字:\n'))
while 1:
    print('错误')
    if player in computer_choice:
        computer_choice.remove(player)
    if len(computer_choice) != 1:
        player = int(input())
    else:
        print('正确答案:{}'.format(computer_choice[0]))
        break
  1. 有两个列表 lst1 = [11, 22, 33] lst2 = [22, 33, 44]获取内容相同的元素
lst1 = [11, 22, 33]
lst2 = [22, 33, 44]
lst = []
for i in lst1:
    if i in lst2:
        lst.append(i)
print(lst)
  1. 现在有8位老师,3个办公室,要求将8位老师随机的分配到三个办公室中
import random
room = [[], [], []]
teachers = ['teacher_'+str(i) for i in range(1, 9)]
# 老师选教室
for i in teachers:
    x = random.randint(0, 2)
    room[x].append(i)
# 打印
print(room)
  1. 现在有8位老师,3个办公室,要求将8位老师随机的分配到三个办公室中,要求每个办公室至少有一个老师
import random
room = [[], [], []]
teachers = ['teacher_'+str(i) for i in range(1, 9)]
# 先让教室选老师
for i in range(3):
    x = random.randint(0, len(teachers)-1)
    room[i].append(teachers[x])
    teachers.remove(teachers[x])
# 老师选教室
for i in teachers:
    x = random.randint(0, 2)
    room[x].append(i)
# 打印
print(room)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值