小菜鸟的python旅程之列表

1、为什么需要列表

  • 变量可以存储一个元素,而列表是一个大容器,可以存储N个元素,程序可以方便的对这些数据进行整体操作。(所有的数组都是由连续的内存位置组成,因此只要第一个内存首位置)
    在这里插入图片描述

  • 列表相当于其他语言中的数组

  • python 中变量存储的是一个对象的引用。

  • python中的数组类型不一定必须相同,而C中创建数组必须指明数组的中的数据类型,数组长度和数组名。
    c:
    C 语言支持数组数据结构,它可以存储一个固定大小的相同类型元素的顺序集合。数组是用来存储一系列数据,但它往往被认为是一系列相同类型的变量。
    在这里插入图片描述
    python:
    在这里插入图片描述
    根据上面的图可以得出python列表有一下特点:

  • 当索引从后往前开始时,第一个元素下标为-1.依次减小。

  • 列表可以存储重复类型,且动态分配存储地址。
    在这里插入图片描述
    python的列表中存储的是数据内容的地址,即对象。
    在这里插入图片描述

2、创建列表# 定义字符串

(1)定义列表

 >>> name = ['tom','Tony','coco']
    >>> name
    ['tom', 'Tony', 'coco']
    >>> type(name)
    <class 'list'>

(2)利用内置函数list()进行定义

name = list(['tom','tony','coco'])
print(type(name))
<class 'list'>

(3)列表里:可以储存不同的数据类型

li = [1,1.5,'hello',True]
print(li)
print(type(li))

在这里插入图片描述
(4)列表里也可以嵌套列表(列表也是一种数据类型)

li1 = [1,1.5,'hello',True,[1,2,3,4,5]]
print(li1)
print(type(li1))

在这里插入图片描述

3.列表的增删改查

(1)列表的增加
在这里插入图片描述

  • 加号相当于连接
service = ['http','ssh','ftp']
print(service + ['firewalld'])

运行结果:在这里插入图片描述

  • append追加一个元素,默认在列表末尾追加,不创建新的列表。
service = ['http','ssh','ftp']
lst2 = ['hello','wor']
service.append('mysql')
print(service)
service.append(lst2)
print(service)

运行结果:
因为默认只能添加一个元素,所以将整个列表作为一个元素添加到末尾。表明列表里面可以嵌套列表
在这里插入图片描述

  • extend追加多个元素,默认在列表末尾追加
service = ['http','ssh','ftp']
lst2 = ['hello','wor']
service.extend(['firewalld','nginx'])
print(service)
service.extend(lst2)
print(service)

运行结果:将列表中的元素拆开追加到列表末尾。
在这里插入图片描述

  • insert在指定索引位置上插入一个元素
service = ['http','ssh','ftp']
service.insert(1,'samba')
print(service)

运行结果:
在这里插入图片描述

  • 任意位置添加至少一个元素:切片
service = ['http','ssh','ftp']
service[0:1] = ['samba','vsftp'] #在第一个元素到第二个元素之间添加两个元素
print(service)

运行结果:
在这里插入图片描述

(2).列表的删除
在这里插入图片描述

  • remove:移除一个元素,若由重复,只删除第一个元素。
service = ['http','ssh','ftp','samba','ssh']
service.remove('ssh')
print(service)

运行结果:
在这里插入图片描述

  • pop:根据索引移除元素,若不指定参数,将删除最后一个元素
service = ['http','ssh','ftp','samba','ssh']
service.pop(1)
print(service)

运行结果:
在这里插入图片描述

  • clear :清除列表中的所有元素
service=['http','ftp','ssh','samba']
service.clear()
print(service)

运行结果:
在这里插入图片描述

  • del:从内存中删除
service = ['http','ftp','nfs']
del service
print(service)

运行结果:
在这里插入图片描述(3).(3)列表的修改

  • 通过索引, 重新赋值,只能修改一个
service=['http','ftp','ssh','samba']
service[0]='nginx'
print(service)

运行结果:
在这里插入图片描述

  • 通过切片,将多个重新赋值修改
service=['http','ftp','ssh','samba']
service[1:3]=['iscsi','mysql','dns','iptables','firewalld','nfs','firewalld']
print(service)

运行结果:
在这里插入图片描述

(4).列表的查看

service = ['ssh','http','ftp','ftp','ssh']
print(service.index('ssh'))
print(service.index('ssh',1,4))
  • 获取列表指定元素的索引index.()
    在这里插入图片描述
print(service.index('ssh')) 只返回第一个ssh 的索引
print(service.index('ssh',1,4))在索引值14之间的ssh,报错,因为没有这个元素在[1,4).

运行结果:
在这里插入图片描述

  • 获取列表中的单个元素
    在这里插入图片描述
print(service2[0][1])#指外层的索引值为0元素,嵌套里索引值1的元素
  • 获取列表元素中的多个元素:切片
    左闭右开
    列表名[start:stop:step] ##默认为左闭右开的列表,第二个冒号后面不写,也默认为一个步长。
    在这里插入图片描述
service = ['http','ssh','ftp']
print(service[1:])1开始,到末尾,步长为1
print(service[:-1])  默认从0开始,到-1(末尾)结束,步长为1
print(service[::-1])   将原列表反过来输出
  • 判断指定元素是否存在列表中:成员操作符
    使用in、not in
service = ['http','ssh','ftp']
print('nfs' in service)
print('nfs' in service1)

运行结果:
for

  • 列表元素的for循环遍历
service = ['http','ssh','ftp']
for i in service:
print(i)

在这里插入图片描述

  • 查看出现的次数
print(service.count('ssh'))

在这里插入图片描述

4.列表的排序

在这里插入图片描述
(1)使用.sort()函数不生成新的列表

#定义列表
>>> names = ['alice' ,'bob','harry','Borry']
#1.默认按ASC码排序
>>> names.sort()
>>> names
['Borry', 'alice', 'bob', 'harry']
#2.按key值排序
>>> names.sort(key=str.upper)
>>> names
['alice', 'bob', 'Borry', 'harry']

在这里插入图片描述
在这里插入图片描述

#3.按数字大小排序,默认升序
a= [34,53,67,12,34,89]
print(a,id(a))
a.sort()
print(a,id(a))

运行结果:
在这里插入图片描述
(2)使用sorted()函数生成新的列表:

name = ['kont','hel','fh','va']
print(name,id(name))
a= sorted(name)
print(a,id(a))

运行结果:
在这里插入图片描述

3.shuffle将原有的列表顺序打乱

import random

#list表示强制转换数据类型为:列表
li = list(range(10))
print(li)

#shuffle:将原有的列表顺序打乱
random.shuffle(li)
print(li)

运行结果:
在这里插入图片描述

5、列表生成式

在这里插入图片描述

list = [ i  for i in range(10) ]
list2 = [ i *i  for i in range(10) ]
print(list)
print(list2)

运行结果:
在这里插入图片描述
要求:列表中的元素值为2,4,6,8,10

list = [i*2 for i in range(1,6)]
print(list)

运行结果:
在这里插入图片描述

列表的综合练习:
1.判断季节

需求:

用户输入月份,判断这个月是哪个季节
 
分析:
3,4,5月----春季  6,7,8----夏季   9,10,11---秋季  12,1,2----冬季 

代码:

month = int(input('Month:'))
if month in [3,4,5]:
    print('春季')
elif month in [6,7,8]:
    print('夏季')
elif month in [9,10,11]:
    print('秋季')
elif month in [12,1,2]:
    print('冬季')
else:
    print('请输入正确值:')

运行结果:

在这里插入图片描述
在这里插入图片描述
2.按要求重组列表元素

需求:
names = ['fentiao','fendai','fensi','fenpi']
输出:I have fentiao, fendai, fensi and fenpi.

代码:

# 定义列表
names = ['fentiao','fendai','fensi','fenpi']

# + 和 join 都表示连接,(join可以指定分隔符连接);
# 列表的 索引 和 切片 都相当于 分离
print('I have ' + ','.join(names[:3]) + ' and ' + (names[3]))

在这里插入图片描述
3.给任意一天,请判断这是这一年第几天

time = input('请输入日期 YYYY-MM-DD:')
date = time.split('-')
year = int(date[0])
month = int(date[1])
day = int(date[2])

li = [31,28,31,30,31,30,31,31,30,31,30,31]
num = 0

if ((year % 4 ==0) and (year % 100 != 0) or (year % 400 == 0)):
    li[1] = 29
for i in range(12):
    if month > i + 1:
        num += li[i]
    else:
        num += day
        break
print('这一天是%d年的第%d天' %(year,num))

运行结果:
在这里插入图片描述
4.编写用户登陆系统
需求:

"""
1.系统里面有多个用户,用户的信息目前保存在列表里面
    users = ['root','westos']
    passwd = ['123','456']
2.用户登陆(判断用户登陆是否成功
    1).判断用户是否存在
    2).如果存在
        1).判断用户密码是否正确
        如果正确,登陆成功,推出循环
        如果密码不正确,重新登陆,总共有三次机会登陆
    3).如果用户不存在
    重新登陆,总共有三次机会

"""

代码:

 users = ['root','westos']
 passwds = ['123','456']

 trycount = 0#
 while trycount < 3:
     inuser = input('用户名: ')
     inpasswd = input('密码: ')

     trycount += 1

     if inuser in users:
         index = users.index(inuser)
         passwd = passwds[index]
         if inpasswd == passwd:
             print('%s用户登录成功' %inuser)
             break
         else:
             print('%s登录失败:密码错误' %inuser)
     else:
 print('%s用户不存在' %inuser)
else:
 print('尝试超过3次,请稍后...')

运行结果:
在这里插入图片描述5.后台管理员管理前台会员信息系统

需求:

"""
1. 后台管理员 admin 密码:admin
2. 管理员才能看到会员信息
3. 会员信息包含
        添加会员信息
        删除会员信息
        查看会员信息
        退出
"""

代码:

print('管理员登录'.center(50,'*'))
inuser = input('UserName: ')
inpasswd = input('Password: ')

users = ['root','westos']
passwds = ['123','456']

if inuser == 'admin' and inpasswd == 'admin':
    print('管理员登录成功')
    print('会员管理'.center(50,'*'))
    while True:
        print("""
            菜单
        1.  添加会员信息
        2.  删除会员信息
        3.  查看会员信息
        4.  退出
        """)
        choice = input('请输入您的选择: ')
        if choice == '1':
            print('添加会员信息'.center(50,'*'))
            addUser = input('添加会员名: ')
            if addUser in users:
                print('%s用户已经存在' %addUser)
            else:
                addPasswd = input('密码: ')
                users.append(addUser)
                passwds.append(addPasswd)
                print('%s用户添加成功' %addUser)

        elif choice == '2':
            print('删除会员信息'.center(50,'*'))
            delUser = input('删除会员名: ')
            delIndex = users.index(delUser)
            users.remove(delUser)
            passwds.pop(delIndex)
            print('%s会员删除成功' %delUser)

        elif choice == '3':
            print('查看会员信息'.center(50, '*'))
            print('\t用户名\t密码')
            userCount = len(users)
            for i in range(userCount):
                print('\t%s\t%s' %(users[i],passwds[i]))

        elif choice == '4':
            exit()
        else:
            print('请输入正确选择!')
else:
    print('管理员登录失败...')

运行结果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
6.栈的实现
需求:

"""
1.入栈
2.出栈
3.栈顶元素
4.栈长度
5.栈是否为空

代码:

# 定义一个空列表,用来表示栈
stack = []

# 定义操作选项的变量
info = """
        栈操作
    1.入栈
    2.出栈
    3.栈顶元素
    4.栈的长度
    5.栈是否为空
    q.退出
"""
# 无限循环
while True:
    # 输出操作选项信息
    print(info)
    choice = input('请输入选择:')
    if choice == '1':
        print('入栈'.center(50,'*'))
        # 接收入栈元素
        item = input('入栈元素:')
        # append:添加元素到列表中
        stack.append(item)
        print('元素%s入栈成功' % item)
    elif choice == '2':
        if len(stack) == 0:
            print('栈为空,无法出栈')
        else:
            print('出栈'.center(50, '*'))
            # pop:删除列表中的最后一个元素
            item = stack.pop()
            print('%s元素出栈成功' % item)
    elif choice == '3':
        # len:列表长度
        if len(stack) == 0:
            print('栈为空,无栈顶元素')
        else:
            print('栈顶元素为%s' % stack[-1])
    elif choice == '4':
        print('栈的长度为%s' % len(stack))
    elif choice == '5':
        if len(stack) == 0:
            print('栈为空')
        else:
            print('栈不为空')
    elif choice == 'q':
        break
    else:
        print('请输入正确的选择')

运行结果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
7.编写小学生算术能力测试系统
需求:

设计一个程序,用来实现帮助小学生进行百以内的算术练习,它具有以
下功能:
提供10道加、减、乘或除四种基本算术运算的题目;
练习者根据显示的题目输入自己的答案,程序自动判断输入的答案是否
正确并显示出相应的信息。

代码:

import random

# 定义用来记录总的答题数目和回答正确的数目
count = 0
right = 0

# 因为题目要求:提供10道题目(因为题目要求:提供10道题目)
while count <= 10:
    # 创建列表,用来记录加减乘除四大运算符
    op = ['+', '-', '*', '/']
    # 随机生成op列表中的字符
    s = random.choice(op)
    # 随机生成0-100以内的数字
    a = random.randint(0,100)
    # 除数不能为0
    b = random.randint(1,100)
    print('%d %s %d = ' %(a,s,b))
    # 默认输入的为字符串类型
    question = input('请输入您的答案:(q退出)')
    # 判断随机生成的运算符,并计算正确结果
    if s == '+':
        result = a + b
    elif s == '-':
        result = a - b
    elif s == '*':
        result = a * b
    else:
        result = a / b

    #  判断用户输入的结果是否正确,str表示强制转换为字符串类型
    if question == str(result):
        print('回答正确')
        right += 1
        count += 1
    elif question == 'q':
         break
    else:
        print('回答错误')
        count+=1
# 计算正确率
if count == 0:
    percent = 0
else:
    percent = right / count

print('测试结束,共回答%d道题,回答正确个数为%d,正确率为%.2f%%' %(count,right,percent*100))

运行结果:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值