列表的创建
列表可以储存多种不同数据类型的组合
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都是不可变数据类型;
# 列表,元组,字典,是可变数据类型;<有增删改查>