1.定义一个空列表
list = []
2.定义一个包含元素的列表
元素可以是任意类型,包括数值类型、列表、元组、字符串等等均可
赋值方式定义
list = ['enzo','20','seber']
list1 = ['enzo',(20,'seber')]
工厂函数定义
n = list(""hello)
In [1]: n=list("hello")
In [2]: print n
['h', 'e', 'l', 'l', 'o']
3.支持的操作符
索引、切片
In [4]: li=[1,1.0,True,'hello',1+4j,[1,2,"hello"]]
In [5]: li[0]
Out[5]: 1
In [6]: li[-1]
Out[6]: [1, 2, 'hello']
In [7]: li[:]
Out[7]: [1, 1.0, True, 'hello', (1+4j), [1, 2, 'hello']]
In [8]: li[1:]
Out[8]: [1.0, True, 'hello', (1+4j), [1, 2, 'hello']]
In [9]: li[0:2]
Out[9]: [1, 1.0]
In [10]: li[::-1]
Out[10]: [[1, 2, 'hello'], (1+4j), 'hello', True, 1.0, 1]
拼接
In [18]: li1=['vsftpd','apache']
In [19]: li2=['mariadb','nfs']
In [20]: li1 + li2
Out[20]: ['vsftpd', 'apache', 'mariadb', 'nfs']
重复
In [21]: li1=['vsftpd','apache']
In [22]: li1*2
Out[22]: ['vsftpd', 'apache', 'vsftpd', 'apache']
成员操作符
In [23]: li1=['vsftpd','apache']
In [24]: 'vsftpd' in li1
Out[24]: True
In [25]: 'vsftpd' not in li1
Out[25]: False
练习1:
查看1-3号主机的21,22,3306,80,69端口
#!/usr/bin/env python
# coding:utf-8
ports=[21,22,3306,80,69]
for i in range(1,4):
for port in ports: #可以通过 for i in list进行遍历列表中的各个元素
ip='192.168.254.'+str(i)
print "[+] Listening On:%s:%d" %(ip,port)
执行结果:
4.列表的常用方法
4.1更新列表
append
增加一个元素
In [5]: li=['ecs','evs']
In [6]: li.append('ces')
In [7]: li
Out[7]: ['ecs', 'evs', 'ces']
extend
可以增加多个元素,可以在括号中给出一个列表,这个列表中的元素会导入到原列表,成为他的元素
In [8]: li=['ecs','evs']
In [9]: li.extend(['ces','vbs'])
In [10]: li
Out[10]: ['ecs', 'evs', 'ces', 'vbs']
注:同样增加一个列表,append把他当成一个元素增加进去,而extend把他当作两个元素加了进去
In [11]: li=['ecs','evs']
In [12]: li.append(['ces','vbs'])
In [13]: li
Out[13]: ['ecs', 'evs', ['ces', 'vbs']]
注:如果增加一个字符,使用qppend表示增加这个字符串,而extend表示这个字符串的每个字母作为一个元素增加进去
In [14]: li=['ecs','evs']
In [15]: li.append('ces')
In [16]: li
Out[16]: ['ecs', 'evs', 'ces']
In [17]: li=['ecs','evs']
In [18]: li.extend('ces')
In [19]: li
Out[19]: ['ecs', 'evs', 'c', 'e', 's']
insert(index,object)
在指定位置添加元素
In [20]: li=['ecs','evs']
In [21]: li.insert(1,"ces")
In [22]: li
Out[22]: ['ecs', 'ces', 'evs']
4.2修改列表的元素
直接重新赋值
In [29]: li=['ecs','evs','ces','vbs','cts','csbs']
In [30]: li[0]='cloud'
In [31]: li
Out[31]: ['cloud', 'evs', 'ces', 'vbs', 'cts', 'csbs']
4.3查看列表
index
查看某个列表元素的下标
In [53]: li=['a','b','c']
In [54]: li.index('a')
Out[54]: 0
In [55]: li=['a','b','c','a']
In [56]: li.index('a')
Out[56]: 0
In [57]: li.index('a',0,4)
Out[57]: 0
In [58]: li.index('a',1,4)
Out[58]: 3
count
查看某个列表元素出现的次数
In [59]: li=['a','b','c','a']
In [60]: li.count('a')
Out[60]: 2
4.4删除
remove
删除元素
In [73]: li=['a','b','c','a']
In [74]: li.remove('a')
In [75]: li
Out[75]: ['b', 'c', 'a']
In [76]: li.remove(li[0])
In [77]: li
Out[77]: ['c', 'a']
pop
li.pop()表示删除最后一个元素
In [78]: li=['a','b','c','a']
In [79]: li.pop()
Out[79]: 'a'
In [80]: li
Out[80]: ['a', 'b', 'c']
li.pop(0)表示删除第一个元素
In [81]: li=['a','b','c','a']
In [82]: li.pop(0)
Out[82]: 'a'
In [83]: li
Out[83]: ['b', 'c', 'a']
li.pop(1)表示删除第二个元素
In [85]: li=['a','b','c','a']
In [86]: li.pop(1)
Out[86]: 'b'
In [87]: li
Out[87]: ['a', 'c', 'a']
del
直接删除这个列表
In [95]: li=['a','b','c','a']
In [96]: del(li)
In [97]: li
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-97-5ce4e85ef0aa> in <module>()
----> 1 li
NameError: name 'li' is not defined
练习2:
1. 用户名和密码分别保存在列表中;
2. 用户登录时,判断该用户是否注册;
2. 用户登录时,为防止黑客暴力破解, 仅有三次机会;
3. 如果登录成功,显示登录成功(exit(), break).
#!/usr/bin/env python
#coding: utf-8
users = ["user1", "user2", "user3"]
passwords = ["123", "456", "789"]
i = 0
while i < 3:
name = raw_input("请输入用户名:")
if name not in users:
print "用户未注册"
break
password = raw_input("请输入密码:")
i += 1
index = users.index(name)
if password == passwords[index]:
print "恭喜登录成功"
break
else:
print "请输入正确的用户名或密码!"
else:
print "已登录三次,请稍后再试"
执行结果:
练习3:
打印栈的过程
列表有容器和可变的特性,通过列表构建其他数据类型;
1. 栈(eg: 往箱子里面放书)栈的工作方式后进先出(LIFO);
2. 队列(eg:饭堂排队买饭)队列的工作方式先进先出(FIFO)
#!/usr/bin/env python
#coding:utf-8
stack = []
info = """
栈操作
1. 出栈
2. 入栈
3. 查看栈元素
4. 退出
"""
print info
while 1:
choice = raw_input("Choice:").strip()
if choice == '1':
if not stack == []:
stack.pop()
else:
print "栈为空"
elif choice == '2':
value = raw_input("请输入入栈的值:").strip()
stack.append(value)
elif choice == '3':
print "栈元素:",
for i in stack:
print i,
print
elif choice == '4':
exit()
else:
print "not valid choice"
执行结果: