Python的数据类型—列表

列表的创建

列表可以储存多种不同数据类型的组合

l = [[1,2,2],3,'hello',2e+3,3j+9,True]
print(l,type(l))

列表的特性

索引

l = [[1,2,2],3,'hello',2e+3,3j+9,True]
print(l[0])    #[1, 2, 2]
print(l[-1])   #True
print(l[0][1]) #2  嵌套列表的索引

强制转换range(5)的值为列表

l = list(range(5))
print(l)

切片

l = [[1,2,2],3,'hello',2e+3,3j+9,True]
print(l[1:3])   #[3, 'hello']
print(l[:-1])   #[[1, 2, 2], 3, 'hello', 2000.0, (9+3j)]:除了最后一个的其他
print(l[1:])    #[3, 'hello', 2000.0, (9+3j), True] #除了第一个的所有索引
print(l[::-1])  #[True, (9+3j), 2000.0, 'hello', 3, [1, 2, 2]] #反转列表
print(l[::2])   #[[1, 2, 2], 'hello', (9+3j)]

重复

l = [1,2,3]
print(l*2)  #[1, 2, 3, 1, 2, 3]

连接

l = [1,2,3]
l1 = [4,5,6]
print(l+l1) #[1, 2, 3, 4, 5, 6]

成员符操作

l = [1,2,3]
print(1 in l) #True
print(1 not in l) #False

for循环

l = [1,2,3]
for i in l:
    print(i)  #输出1 2 3

列表切片的练习
假定有下面这样的列表:
names = [‘fentiao’, ‘fendai’, ‘fensi’, ‘apple’]
输出结果为:’I have fentiao, fendai, fensi and apple.’

names = ['fentiao', 'fendai', 'fensi', 'apple']
print('i have '+",".join(names[:-1])+' and '+names[-1])
#i have fentiao,fendai,fensi and apple

列表的增加

append #追加元素到列表最后

languages = ['shell', 'c', 'python']
languages.append('C++')
print(languages.append('c++'))  # None
print(languages)  # ['shell', 'c', 'python', 'C++', 'c++']
languages = ['shell', 'c', 'python']
other = ['java','Go']
languages.append(other)
print(languages) #['shell', 'c', 'python', ['java', 'Go']]

extend #追加多个元素到列表中

languages = ['shell', 'c', 'python']
other = ['java','Go']
languages.extend(other)
print(languages)  #['shell', 'c', 'python', 'java', 'Go']

inster #添加元素到指定的索引前面

languages = ['shell', 'c', 'python']
languages.insert(0,'java')
print(languages) #['java', 'shell', 'c', 'python']

列表的删除

clear #清空列表

languages = ['shell', 'c', 'python']
languages.clear()
print(languages) #[]

pop #弹出 删除指定索引的值,默认情况下删除最后一个

languages = ['shell', 'c', 'python']
a = languages.pop()
print(languages,a)  #['shell', 'c'] python

remove # 删除指定的值

languages = ['shell', 'c', 'python']
languages.remove('shell')
print(languages)   #['c', 'python']

del # 删除列表元素可以通过索引和切片的方式删除

languages = ['shell', 'c', 'python']
del languages[:-1]   # ['python']
del languages[2]     # ['shell','c']
print(languages)

列表取重的方法

l = ['shell', 'c', 'python', 'shell', 'c', 'C#']
new_l = []
for i in l:
    if i not in new_l and l.count(i) == 1:
        new_l.append(i)
print(new_l)

修改元素列表

通过索引修改

l = ['shell', 'c', 'python', 'shell', 'c', 'C#']
l[0] = 'php'
print(l)   #['php', 'c', 'python', 'shell', 'c', 'C#']

通过切片修改

l = ['shell', 'c', 'python', 'shell', 'c', 'C#']
l[:2] = 'php','java'
print(l) #['php', 'java', 'python', 'shell', 'c', 'C#']

列表的一些其他用法

languages = ['shell', 'c', 'python', 'shell', 'a', 'B', 'c']
print(languages.count('shell'))  #列表中,元素出现的次数
print(languages.index('shell',1,4)) #在1-4之间第一次出现shell的索引值

该方式不能实现复制, 因为两个变量指向同一块内存空间;
languages1 = languages

要实现复制的两种办法

第一种方法调用模块

import copy
languages = ['shell', 'c', 'python', 'shell', 'a', 'B', 'c']
languages1 = languages.copy()
print(id(languages1),id(languages))#140174107252040 140174107251848

第二种复制模块的方法

languages = ['shell', 'c', 'python', 'shell', 'a', 'B', 'c']
languages1 = languages[:]
print(id(languages1),id(languages))#139772805596296 139772805596104

###字母按照ASCII码从小到大排序 查看ASCII的方法

languages = ['shell', 'c', 'python', 'shell', 'a', 'B', 'c']
languages.sort()
print(languages)  #['B', 'a', 'c', 'c', 'python', 'shell', 'shell']

字母按照ASCII码从大到小排序

languages = ['shell', 'c', 'python', 'shell', 'a', 'B', 'c']
languages.sort(reverse=True)
print(languages)

用户登陆系统Version2:
1). 已知多个用户名和密码分别保存在列表中;
2). 判断用户名是否存在,
如果登陆的用户不存在,则报错;;
如果用户存在, 则判断密码是否正确:
如果正确, 输出用户登陆成功;
如果不正确, 输出登陆失败;
3). 为防止黑客暴力破解密码, 登陆最多有3次机会;

import getpass  #密码模块,让输入的密码看不见
user_list = ['user1','user2','user3']
pass_list = ['123','456','789']
for i in range(3):
    username = input('请输入用户名:')
    password = getpass.getpass("密码")
    if username in user_list:
        item = user_list.index(username)
        passwd = pass_list[item]
        if password == passwd:
            print("登录成功")
            break
        else:
            print("密码错误")
    else:
        print("用户名不存在")
else:
    print("登录超过三次")

判断队列是否为空三种方法:

if len(queue) == 0:
if queue == []:
if not queue:

通过列表取构建队列的数据结构

menu = """
            选择菜单
        1,入队
        2,出队
        3,队头
        4,队尾
        5,队列长度
        6,队列元素显示
        7,队列是否为空
        8,队列是否满
请输入你的选择:
"""
queue = []
choice = input(menu)
max_len = 10
if choice == '1':
    if len(queue)<10:
        item = input('请输入元素:')
        queue.append(item)
        print('%s成功加入队列' %(item))
    else:
        print("队列已满")
elif choice == '2':
    if not queue:
        print("队列为空")
    else:
        item = queue.pop(0)
        print("%s已经被移出")
elif choice == '3':
    if not queue:
        print("队列为空")
    else:
        item = queue[0]
        print('队头是'+item)
elif choice == '4':
    if not queue:
        print("队列为空")
    else:
        item = queue[-1]
        print('队尾是'+item)
elif choice == '5':
    num = len(queue)
    print('队列长度是'+num)
elif choice == '6':
    for i in queue:
        print(i,end=',')
else:
    print("请输入正确的选择")

“is” 和 “==”的区别:

id : 内存中存储的位置
type :变量的类型
value : 判断值是否相等
“==” :判断的是type,和 value
“is” :判断的是type,value和id
is :表示的是对象表示符,表示两个变量的值是否在同一块内存空间。
== :表示值是否像等
is 返回值为True,== 一定为True

深拷贝和浅拷贝

有专门用来拷贝的模块

import copy
l = [1,2,4,[1,2,3]]
l2 = copy.copy(l)
print(id(l),id(l2)) #139675859408136 139675859409416
print(id(l[3][1]),id(l2[3][1])) #9326592 9326592
#这种属于浅拷贝,列表中嵌套的列表,和原列表不在同一个地址空间。
#浅拷贝不会将列表中嵌套的列表拷贝,所以就会使用深拷贝,
#深拷贝就是逐层全部拷贝。

可变数据类型和不可变数据类型

# 数值类型, 字符串, bool都是不可变数据类型;
# 列表,元组,字典,是可变数据类型;<有增删改查>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值