1.列表的定义
• 定义一个空列表
list = []
• 定义一个包含元素的列表,元素可以是任意类
型,包括数值类型,列表,字符串等均可。
list = ["fentiao", 4, 'gender']
list1 = ['fentiao',(4,'male')]
2.列表的索引
•下标是从0开始计算,比如list[0]读取的是列
表的第1个元素;
•list[-1]读取的是列表的倒数第1个元素;
a = ["fentiao","fensi","fendai"]
a[1]
a[-2]
3.列表的切片
• 0代表从哪个索引开始切片;
• 3代表切片到哪个位置,并且不包含第三
个索引;
• 2代表切片的步长;
a = [“fentiao”,”fensi”,”fendai”]
a[0:2]
a[0:2:2]
a[::-1]
4.列表的重复
li*3
5.列表的连接
li+list
6.成员操作符
root in li
7.列表的添加
列表可通过append方法添加元素; ##添加到列表最后面
a = ["1","2","3","4"]
a.append("5")
列表可通过方法添加元素;
a = ["12","34"]
b = ["33","11"]
a.extend(b) ##多行加入
在指定位置添加元素使用inert方法; ##添加在指定索引的前面
L.insert(index, object)
a.insert(1,5)
8.列表的修改
• 修改列表的元素:直接重新赋值;
a = ["12","34","56"]
a[0] = "11"
9.列表的查看
查看某个列表元素的下标用index方法;
a.index("12")
查看某个列表元素出现的次数用count方法;
a.count("12")
10.列表的删除
1) 删除列表中最先出现的值,不存在,则报错;
allow_ip.remove('172.25.254.1')
print allow_ip
2) del(list[])删除列表中的指定下标
3) pop是删除指定索引的值;如果列表为空或者索引不在范围内,则报错; 如果不指定索引值,默认删除最后一个元素;
allow_ip.pop()
反转列表
allow_ip.reverse()
列表排序
allow_ip.sort()
print allow_ip
内置函数
1) cmp() ##比较
2) max() ##最大
3) min() ##最小
4) enumerate() ##枚举
5) zip() ##配对
s = 'abc'
s1 = '123'
print zip(s,s1)
6) sum() ##求和
7) len() ##求长度
8) abs() ##返回绝对值
队列的建立(queue)
import queue
queue.Queue
queue = []
info = """
队列操作
1.添加队列元素
2.删除队列元素
3.队长度
4.对头元素
5.队尾元素
6.退出
"""
print info
while 1:
choice = raw_input('请输入你的选择:')
if choice == '1':
in_value = raw_input('添加队列的元素:')
queue.append(in_value)
print "元素%s添加成功!" %(in_value)
print queue
elif choice == '2':
if queue:
#queue1 = queue[::-1]
out_value = queue.pop(0)
print "%s删除成功!" %(out_value)
print queue
else:
print "队列为空"
elif choice == '3':
print "队长度:%s" %(len(queue))
elif choice == '4':
if queue:
print "对头元素为: %s" %(queue[0])
else:
print "队列为空"
elif choice == '5':
if queue:
print "队尾元素为: %s" %(queue[-1])
else:
print "队列为空"
elif choice == '6':
exit(0)
else:
print "error"
栈的建立(stack)
stack = []
info = """
栈操作
1. 入栈
2. 出栈
3. 栈长度
4. 栈顶元素
5. 退出
"""
print info
while 1:
choice = raw_input('清输入你的选择:')
if choice == '1':
in_value = raw_input('入栈元素:')
stack.append(in_value)
print "元素%s入栈成功!" % (in_value)
print stack
elif choice == '2':
# if stack != []: 判断列表是否为空;
if stack:
out_value = stack.pop()
print "%s 出栈成功!" %(out_value)
print stack
else:
print "栈为空!"
elif choice == '3':
print "栈长度为%d" %(len(stack))
elif choice == '4':
# if stack != []: 判断列表是否为空;
if stack:
print "栈顶元素为: %s" %(stack[-1])
else:
print "栈为空!"
elif choice == '5':
exit(0)
else:
print "请输入正确的选择!"
is和==的区别
一定要在交互式环境测试;
a = 'hello'
b = 'hello'
print id(a),id(b)
字符串驻留机制;
- 对于较小的字符串, id相同;
- 对于较长的字符串, id不相同, 因为不会驻留字符串的副本;
c = 'hello java world'
d = 'hello java world'
print id(c), id(d)
print c is d
e = 'python'
f = "".join(['p', 'y', 't', 'h', 'o', 'n'])
print id(e), id(f)
结论:
is表示的是对象标识符;表示两个变量的值是否在同一块内存空间;
==表示的是值是否相等;
总结: is返回值为True, ==返回一定是True;
深拷贝和浅拷贝
1) 直接赋值, 只是把新的变量指向li的内存空间, 没有复制;当li改变, li1也随之改变;
>>> li = [1, 2, 3]
>>> li1 = li
>>> id(li)
140580753414048
>>> id(li1)
140580753414048
2) 浅拷贝: 拷贝出一份副本, 但是没有拷贝子对象(列表里面的列表对象);不完全拷贝
# - 切片li[:]
# - copy.copy()
>>> li1 = li[:]
>>> id(li), id(li1)
(140580753414048, 140580753253440)
>>> li = ['fentiao', 'zhurou', ['fensi', 'fendai']]
>>> li1 = li[:]
>>> id(li), id(li1)
(140580753414192, 140580753414048)
>>> li
['fentiao', 'zhurou', ['fensi', 'fendai']]
>>> li1
['fentiao', 'zhurou', ['fensi', 'fendai']]
>>> id(li[-1]), id(li[-1])
(140580753340464, 140580753340464)
>>> id(li[-1]), id(li1[-1])
(140580753340464, 140580753340464)
>>> import copy
>>> li2 = copy.copy(li)
>>> id(li), id(li1), id(li2)
(140580753414192, 140580753414048, 140580753498840)
>>> id(li[-1]), id(li1[-1]), id(li2[-1])
(140580753340464, 140580753340464, 140580753340464)
3) 深拷贝: 里面的所有对象重新拷贝, 包括子对象;
>>> li3 = copy.deepcopy(li)
>>> id(li[-1]), id(li1[-1]), id(li3[-1])
(140580753340464, 140580753340464, 140580753461976)
本文详细介绍Python中列表的各种操作,包括定义、索引、切片、重复、连接等基础操作,以及成员操作、添加、修改、查看、删除等高级操作。此外,还介绍了队列和栈的基本操作,并解释了is与==的区别、深拷贝与浅拷贝的概念。
1万+

被折叠的 条评论
为什么被折叠?



