列表 list (大了激素的数组)
一.什么是列表
1.数组:数组是只能存储同一种数据类型的结构
scores[43]=[12,12.0,"hello"]
2.定义列表
In [1]: li = [1,1.0,"zl",(1,2,3,4),[1,2,3,4]]
In [2]: print li
[1, 1.0, 'zl', (1, 2, 3, 4), [1, 2, 3, 4]]
3.定义元组
In [3]: t = (1,1.0,"zl",(1,2,3,4),[1,2,3,4])
In [5]: print t
(1, 1.0, 'zl', (1, 2, 3, 4), [1, 2, 3, 4])
4.元组是不可变数据类型 不能修改元素
In [6]: t[0] = 11
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-6-069e99c0bcf1> in <module>()
----> 1 t[0] = 11
TypeError: 'tuple' object does not support item assignment
5.列表是可变数据类型,可以修改数据
In [7]: li[0] = 11
In [8]: print li
[11, 1.0, 'zl', (1, 2, 3, 4), [1, 2, 3, 4]]
二.分析列表特性(与元组对比)
1.索引
In [9]: print li
[11, 1.0, 'zl', (1, 2, 3, 4), [1, 2, 3, 4]]
In [10]: li [0] ##正向索引
Out[10]: 11
In [11]: li [-1] ##反向索引
Out[11]: [1, 2, 3, 4]
In [12]: li [-1][2] ##拿出列表最后一个元素,最后一个元素是列表,再拿出列表的第三
个元素
Out[12]: 3
2.切片
In [13]: li[3:] ##拿出最后两个元素
Out[13]: [(1, 2, 3, 4), [1, 2, 3, 4]]
In [14]: li[1:] ##曲调列表的第一个元素
Out[14]: [1.0, 'zl', (1, 2, 3, 4), [1, 2, 3, 4]]
In [15]: li[::-1] ##逆转
Out[15]: [[1, 2, 3, 4], (1, 2, 3, 4), 'zl', 1.0, 11]
3.重复
In [1]: li = [1,1.0,"zl",(1,2,3,4),[1,2,3,4]]
In [2]: li * 2
Out[2]:
[1,
1.0,
'zl',
(1, 2, 3, 4),
[1, 2, 3, 4],
1,
1.0,
'zl',
(1, 2, 3, 4),
[1, 2, 3, 4]]
4.连接(不建议这样连接两个列表,后面会讲解更高效的方法)
In [17]: li1 = ["zl","new year"]
In [18]: li + li1
Out[18]: [11, 1.0, 'zl', (1, 2, 3, 4), [1, 2, 3, 4], 'zl', 'new year']
5.成员操作符
In [19]: print li
[11, 1.0, 'zl', (1, 2, 3, 4), [1, 2, 3, 4]]
In [20]: print 13 in li
False
In [21]: print 13 not in li
True
三.列表的增删改查
1.增
In [23]: allow_ip = ["172.25.254.1","172.25.254.2","172.25.254.3"]
In [24]: allow_ip.append("172.25.254.4") ##追加元素到列表的最后
In [25]: print allow_ip
['172.25.254.1', '172.25.254.2', '172.25.254.3', '172.25.254.4']
In [26]: allow_ip.insert(0,"192.168.1.253") ##添加元素到指定位置
In [27]: print allow_ip
['192.168.1.253', '172.25.254.1', '172.25.254.2', '172.25.254.3', '172.25.254.4']
In [29]: allow_ip.extend("hello") ##增加多个元素到列表最后
#iterable 代表可迭代的
# 目前学习的可迭代对象有: str, list, tuple
In [30]: print allow_ip['192.168.1.253', '172.25.254.1', '172.25.254.2', '172.25.254.3', '172.25.254.4', 'h', 'e', 'l', 'l', 'o']
2.改
In [2]: allow_ip = ['192.168.1.253', '172.25.254.1', '172.25.254.2', '172.25.254.3', '172.25.254.4', 'h', 'e', 'l', 'l', 'o']
In [3]: allow_ip[0] ="192.168.1.1" # 通过列表的索引,对列表某个索引值重新赋值
In [4]: print allow_ip
['192.168.1.1', '172.25.254.1', '172.25.254.2', '172.25.254.3', '172.25.254.4', 'h', 'e', 'l', 'l', 'o']
3.查
In [5]: buy = ["apple","computer","apple"]
In [9]: print buy.count("apple") # 统计某个元素在列表中出现的次数;
2
In [10]: print buy.index("computer") # 找到某个值在列表中的索引值
1
4.删
In [11]: buy.remove("apple") # 删除列表中遇到的第一个value值;
In [12]: print buy
['computer', 'apple']
In [13]: del buy[0] # 删除列表中第i个索引值;
In [14]: print buy
['apple']
In [15]: buy = ["apple","computer","apple"]
In [16]: print buy['apple', 'computer', 'apple']
In [18]: del buy[1:] # 删除除了第一个元素之外的其他索引值
In [19]: print buy
['apple']
In [20]: del buy # 删除列表对象
In [23]: li = [1,2,45,23,21,45]
In [24]: li.pop() # 删除指定索引对应的值,默认是最后一个元素;
Out[24]: 45
In [25]: print li
[1, 2, 45, 23, 21]
In [26]: li.pop(0) # 删除列表的第一个索引;
Out[26]: 1
In [27]: print li
[2, 45, 23, 21]
四.其他排序及逆转
1.排序
# 排序,如果说都是数字,按照数字大小排序;
# 是字母的话,按照ASCII码来排序;
# **** 如何查看对应的ASCII码? ord('a')
In [27]: print li
[2, 45, 23, 21]
In [28]: li.sort()
In [29]: print li
[2, 21, 23, 45]
2.逆转
In [33]: print li
['alice', 'hello']
In [34]: li.reverse()
In [35]: print li
['hello', 'alice']
五.列表练习
1.
#!/usr/bin/env python
#coding:utf-8
'''
综合考察练习:
1.用户名和密码分别保存在列表中
2.用户登陆时,判断该用户是否注册
3.用户登陆时,为防止黑客暴力破解,仅有三次机会
4.如果登陆成功,显示登陆成功
知识点学习:
python中特有的while...else...语句
如果满足while后面的语句,执行while循环的程序。如果不满足,执行else中的程序
'''
users = ["zl","lulubao"]
password = ["123","456"]
trycount = 0
while trycount<3:
username = raw_input("输入用户名:")
if not username in users:
print "用户未注册"
break
password1 =raw_input("输入密码:")
index = users.index(username)
if password1 == password[index]:
print "登陆成功"
exit()
else:
print "登陆失败"
trycount += 1
else: print "密码错误超过三次 强制退出系统"
2.
#!/usr/bin/env python
#coding:utf-8
'''
应用案例:
生成多个银行卡号
卡号由6位组成, 前3位是610, 后面的依次是001, 002, 003...100
'''
cardids = []
for i in range(1,101): ##i = 1,2,3....100
a = "610%.3d" %i ##a = 610001,610002,....610100
cardids.append(a)
# 卡号显示,每10个卡号换行显示;
for i,j in enumerate(cardids): ##玫举 i,j = 0 610001
if i%10==0:
print
print j,
六.列表构建栈和队列数据结构
栈是先进后出(LIFO-first in last out);
类似于往箱子里面放书;
代码实现如下: (实际应用中这样太麻烦,将来会用类实现)
#!/usr/bin/env python
#coding:utf-8
stack = []
info = """
栈操作
1). 入栈
2). 出栈
3). 栈长度
4). 查看
5). 退出
请输入你的选择:"""
while True:
choice = raw_input(info).strip() ##省略空格
if choice == "1":
print "入栈操作".center(40, "*")
value = raw_input("请输入入栈元素:")
stack.append(value) ##追加在stack栈最后
print "元素%s入栈成功..." %(value)
elif choice == "2":
print "出栈操作".center(40, "*")
# if len(stack) == 0:
if not stack:
print "栈为空"
else:
stack.pop() ##输出最后一个元素
print "元素%s出栈成功...." %(item)
elif choice == "3":
print "查看栈长度".center(40, "*")
print len(stack)
elif choice == "4":
print "查看栈元素".center(40, "*")
if not stack:
print "栈为空"
for i in stack:
print i
elif choice == "5":
exit()
else:
print "请输入正确的选择......"
队列
队列是先进先出(FIFO):
类似于去餐厅买饭排队;
七.列表内置方法
cmp
min, max
zip
enumerate