python列表的回顾练习

  • 1列表的定义
有了列表容器,我们可以使用一个变量来保存多个数据更重要的是,我们可以使用循环对容器中保存的数据进行操作
def main():
    f = [12, 45, 99, 68, 777, 32]  # 初始化容器
    # 索引 - 下标 第一个元素的下标为0 通过下标取数据,修改数据
    print(f[0])
    print(f[2])
    print(f[5])
    f[4] = 77
    print(f[4])


if __name__ == '__main__':
    main()
  • 2 获取文件后缀名
# 如果给的文件名没有后缀名,怎么处理
# 要考虑到各种情况
# rfind方法---找点,最右边的点,从右往左找,很有可能是
# pos不能等负一
# 设计一个函数,给你文件名,截取该文件的后缀名
# 带点后缀名的做法---默认设为has_dot=False,不带点
# 重新设置一个变量index,
# 如果需要点,调用的时候,后面要注明True,就将pos的值赋值给index;
# 如果不需要点,就将pos + 1的值赋值给index,调用的时候还是按照默认值来,无需加True
def get_suffix(filename, has_dot=False):
    """
    获取文件名的后缀名
    :param filename: 文件名
    :param has_dot: 后缀名是否带点
    :return: 文件的后缀名
    """
    pos = filename.rfind('.')
    if 0 < pos < len(filename) - 1:
        index = pos if has_dot else pos + 1  # 三元条件运算符
        # 切片操作
        return filename[index:]
    else:
        return '错误信息'


def main():
    a = get_suffix('hello.txt')
    b = get_suffix('hello.jpg', True)  # 需要点的做法
    c = get_suffix('abc.efg.txt')
    d = get_suffix('.abc')
    e = get_suffix('text.py')
    f = get_suffix('hello.c')
    print(a)
    print(b)
    print(c)
    print(d)
    print(e)
    print(f)


if __name__ == '__main__':
    main()
# 模块---单一职责原则,一个模块中不要塞太多的东西
  • 3 列表的添加、删除元素
def main():
    f = [100, 200, 500]
    # 添加元素
    # insert 具有一定的容错性,即使没有该元素,也不会报错
    f.append(123)
    f.insert(2, 300)
    f.insert(-1, 400)
    # 删除元素
    """
    1.知道位置:del
    2.不知道位置,但知道元素是什么:remove
    3.不知道元素位置,也不知道元素是什么,先用if ... in ...判断,看元素是否在列表里
    """
    f.remove(500)
    del f[3] # 知道位置-下标,直接用del删
    # f.clear() - 清空,一个都不剩
    # 判断元素是否在列表容器中
    if 500 in f:  # 先检查看要删除的元素是否在列表中,如果(条件成立)在,则删除;如果不在,则静默处理
        print(f)
    # f.index(500) 找不到会报错
    f.pop()  # 干掉列表中的最后一个元素提取出来,也可以带索引参数
    print(f)


if __name__ == '__main__':
    main()
  • 4 列表中枚举的用法
def main():
    f = [100, 200, 500]
    print(f[0])
    print(f[1])
    print(f[2])
    # print(f[3]) list out of range-超出索引的范围,无法取到
    print(f[-1])
    print(f[-2])
    print(f[-3])
    # print(f[-4]) list out of range-超出索引的范围,无法取到
    # range(0)- 0 1 2
    for index in range(len(f)):
        print(f[index])
    for value in f:
        print(value)
    for val in f:
        val += 10
        print(val)
    print(f)
    # 给出下标的写法,用枚举
    for index, val in enumerate(f):
        # enumerate为类型,返回的是一组元组,打出的为索引:值。既有下标又有值
        print(index, ':', val)
if __name__ == '__main__':
    main()
  • 5 摇色子练习
# 一个色子
from random import randint


def main():
    f = [0] * 6
    for _ in range(60000):
        dice = randint(1, 6)
        f[dice - 1] += 1
    print(f)


if __name__ == '__main__':
    main()


# 摇两个色子做法一********************************

# 有了列表容器,我们可以使用一个变量来保存多个数据
# 更重要的是,我们可以使用循环对容器中保存的数据进行操作
from random import randint


def roll_dace(n=2):
    total = 0
    for _ in range(n):
        total += randint(1, 6)
    return total


def main():
    f = [0] * 11  # 2颗色子,2-12,一共有11种情况
    for _ in range(60000):
        dace = roll_dace()
        f[dace - 2] += 1
    point = 2  # 点数,从2点开始
    # 直接通过for in 循环对容器进行遍历 -(遍历-把容器中的元素过一遍)
    for counter in f:  # 取出容器中所有的数  counter 为f的下标,为0-10
        print('%d点摇出了%d次' % (point, counter))
        point += 1


if __name__ == '__main__':
    main()

# 摇两个色子做法二********************************
from random import randint


def roll_dice(n=2):
    total = 0
    for _ in range(n):
        total += randint(1, 6)
    return total


def main():
    f = [0] * 11
    for _ in range(60000):
        dice = roll_dice(2)
        f[dice - 2] += 1
    # f_len = len(f)
    # print(f_len)
    for index in range(len(f)):  # 容器的长度,index的循环范围为0-10
        print('%d点摇出了%d次' % (index + 2, f[index]))
        # 统计概率的做法
        print('%d点摇出了%.2f%%' % (index + 2, f[index] / 600))  # 600为概率的百分数


if __name__ == '__main__':
    main()

# 摇两个色子做法三---枚举做法********************************
from random import randint


def roll_dice(n=2):
    total = 0
    for _ in range(n):
        total += randint(1, 6)
    return total


def main():
    f = [0] * 11
    for _ in range(60000):
        dice = roll_dice(2)
        f[dice - 2] += 1
    # f_len = len(f)
    # print(f_len)
    for index, val in enumerate(f):  # 容器的长度,index的循环范围为0-10
        print('%d点摇出了%d次' % (index + 2, val))
        # 统计概率的做法
        print('%d点摇出了%.2f%%' % (index + 2, val / 600))  # 600为概率的百分数


if __name__ == '__main__':
    main()
  • 6 列表的排序
def main():
    # 给容器中的元素排序
    # 选择排序
    # 冒泡排序
    f = ['orange', 'mango', 'grape', 'peach', 'apple', 'watermelon']
    # 方法1
    # 全局函数 sorted ,是返回了一个新的列表容器,按照从小到大排列,默认a-z 升序
    f1 = sorted(f)
    print(f)
    print(f1)
    # 如果要按照从大到小的顺序排,则需要用reverse
    f1.reverse()
    print(f1)
    # python内置的排列方法默认都是排升序(从小到大)
    # 如果希望排列成升序(从大到小),可以通过reverse参数来指定
    f2 = sorted(f, reverse=True)
    print(f2)
    # python中的函数几乎都是没有副作用的函数
    # 调用函数之后不会影响传入的参数

    # 方法2
    f.sort(reverse=True)  # 默认也是升序
    print(f)

    # 得到一个反转之后的容器
    f3 = reversed(f)
    print(f)


if __name__ == '__main__':
    main()
  • 7 # 斐波拉契数列
# 斐波拉契数列
# 1     0
# 1     1
# 2     1
# 3     2
# 5     3
# 8     5
#[1, 1, 2, 3, 5, 8, 13, 21, ...]
# 黄金分割就是从这里来的

def main():
    # 前两个数是指定的
    f = [1, 1]
    print(f)
    for index in range(2, 20):
        var = f[index -1] + f[index - 2]
        f.append(var)
        print(f)
    print(f)
    print(f[18] / f[19])  # 黄金分割点
    f2 = f[18:]  # 列表切片, 把索引为18的后面元素都取出来,为f[18],f[19]
    print(f2[0] / f2[1])
    print(f2)
    # 列表切片做反转运算
    f3 = f[::-1]  # 第一个冒号前面:为开始索引,第二个冒号前面:为结束索引,-1为步长
    print(f3)
    f.reverse()  # 彻底把原来的反转
    print(f)


if __name__ == '__main__':
    main()
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值