列表
列表的定义
- 列表是一个容器, 可以存储不同数据类型的数据;
- 列表里面可以存储列表;
li = [1, 1.0, 1L, 1 + 2j, "hello", [1, 2]]
print li
# 定义一个空列表
li = []
print li, type(li)
li = list()
print li, type(li)
# 删除;列表在内存中的存储;
del li
#打印报错, 因为li已经被删除;
print li
#列表的特性
li = [1, 1.0, 1L, 1 + 2j, "hello", [1, 2]]
索引
#索引
greeting = 'Hello'
# 第一个元素
print(greeting[0]) # H
# 最后一个元素
print(greeting[-1]) # o
# 直接使用字面量
print('Hello'[0]) # H
# 如果函数调用返回一个序列,可以直接对其执行索引操作
fourth = input('Year: ')[3] # Year: 2020
print(fourth) # 0
切片
第一个索引包含的是第一个元素的编号 但第二个索引是切片后余下的第一个元素编号 (含头不含尾)
In [1]: tag = '<a href="http://www.python.org">Python web site</a>'
In [2]: tag[9:30]
Out[2]: 'http://www.python.org'
In [3]: tag[32:-4]
Out[3]: 'Python web site'
In [11]: numbers[-3:]
Out[11]: [8, 9, 10]
In [12]: numbers[:3]
Out[12]: [1, 2, 3]
In [13]: numbers[:]
Out[13]: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
更大的步长
list[begin:end:step]
# 步长为1
In [14]: numbers[0:10:1]
Out[14]: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
#步长为2
In [15]: numbers[0:10:2]
Out[15]: [1, 3, 5, 7, 9]
In [16]: numbers[1:10:2]
Out[16]: [2, 4, 6, 8, 10]
In [19]: numbers[::-1]
Out[19]: [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
序列相加
不能拼接不同类型的序列
In [20]: [1,2,3] + [4,5,6]
Out[20]: [1, 2, 3, 4, 5, 6]
In [21]: [1,2,3] + [3,4,5]
Out[21]: [1, 2, 3, 3, 4, 5]
乘法
#重复
In [22]: 'python' * 5
Out[22]: 'pythonpythonpythonpythonpython'
In [23]: [42] * 10
Out[23]: [42, 42, 42, 42, 42, 42, 42, 42, 42, 42]
初始化一个长度为10的列表
In [24]: [None] * 10
Out[24]: [None, None, None, None, None, None, None, None, None, None]
成员资格
In [25]: permissions = 'rw'
In [26]: 'w' in permissions
Out[26]: True
In [27]: 'x' in permissions
Out[27]: False
In [28]: users = ['mlh','foo','bar']
In [29]: 'mlh' in users
Out[29]: True
长度、最小值和最大值
len(numbers)
Out[3]: 3
max(numbers)
Out[4]: 678
min(numbers)
Out[5]: 34
列表:Python的主力
函数list
In [1]: list('Hello')
Out[1]: ['H', 'e', 'l', 'l', 'o']
基本的列表操作
修改列表:给元素赋值
In [2]: x = [1,1,1]
In [3]: x[1] = 2
In [4]: x
Out[4]: [1, 2, 1]
删除元素
In [5]: del x[1]
In [6]: x
Out[6]: [1, 1]
给切片赋值
In [7]: name = list('Perl')
In [8]: name
Out[8]: ['P', 'e', 'r', 'l']
In [9]: name[2:] = list('ar')
In [10]: name
Out[10]: ['P', 'e', 'a', 'r']
# 在不替换原有元素的情况下插入新元素
In [11]: numbers=[1,5]
In [12]: numbers[1:1]
Out[12]: []
In [13]: numbers[1:1]=[2,3,4]
In [14]: numbers
Out[14]: [1, 2, 3, 4, 5]
#采用翔安
列表的增删改查
append
allow_users = ['user1', 'user2', 'user3']
# append:追加, 追加一个元素到列表最后;
allow_users.append('user4')
print allow_users
# extend: 追加多个元素到列表最后;
jishu_groups = ['jishu1', 'jishu2', 'jishu3']
allow_users.extend(jishu_groups)
print allow_users
# insert:插入, 把元素插入到列表指定的索引前面;
allow_users.insert(0, 'user5')
print allow_users
#pop 删除并返回列表最后一个元素
In [22]: x=[1,2,3]
In [23]: x.pop()
Out[23]: 3
In [24]: x
Out[24]: [1, 2]
In [25]: x.pop(0)
Out[25]: 1
In [26]: x
Out[26]: [2]
clear
In [1]: lst = [1,2,3]
In [2]: lst.clear()
In [3]: lst
Out[3]: []
copy
#浅拷贝
In [4]: a=[1,2,3]
In [5]: b=a
In [6]: b[1]=4
In [7]: a
Out[7]: [1, 4, 3]
#深拷贝
In [8]: a=[1,2,3]
In [9]: b=a.copy()
In [10]: b[1]=4
In [11]: a
Out[11]: [1, 2, 3]
In [12]: b
Out[12]: [1, 4, 3]
count
In [15]: ['to', 'be', 'or', 'not', 'to', 'be'].count('to')
Out[15]: 2
In [16]: x=[[1,2],1,1,[2,1,[1,2]]]
In [17]: x.count(1)
Out[17]: 2
In [18]: x.count([1,2])
Out[18]: 1
index
In [19]: knights = ['We', 'are', 'the', 'knights', 'who', 'say', 'ni']
In [20]: knights.index('who')
Out[20]: 4
In [21]: knights.index('herring')
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-21-ee9b1a4b9dff> in <module>
----> 1 knights.index('herring')
ValueError: 'herring' is not in list
查看
allow_users = ['user1', 'user2', 'user3', 'user1']
print allow_users.count('user1') #查看user1出现的次数
print allow_users.index('user3') #查看user3的索引
修改
allow_users = ['user1', 'user2', 'user3', 'user1']
print allow_users[0]
allow_users[0] = 'user10' #将索引为0的修改为user10
print allow_users
allow_users[1:3] = ['group1', 'group2'] #将索引为1-3的修改为group1,gruop2
print allow_users
删除
allow_users = ['user1', 'user2', 'user3', 'user1']
# 删除列表中的value值, 删除的是遇到的第一个值;
allow_users.remove('user1')
print allow_users
# 默认删除列表的最后一个元素;
print allow_users.pop()
print allow_users
# 删除列表中的第0个索引
print allow_users.pop(0)
print allow_users
reverse
li = [2, 4, 5,7, 9, 100]
li.reverse() # 类似于li[::-1]
print li
sort
就地排序,意味着对原来的列表进行修改;
In [28]: x=[2,1,4]
In [29]: x.sort()
In [30]: x
Out[30]: [1, 2, 4]
#排序函数排序
In [33]: y=[2,1,4]
In [34]: z=sorted(y)
In [35]: z
Out[35]: [1, 2, 4]
In [36]: y
Out[36]: [2, 1, 4]
高级排序
In [1]: x = ['aardvark', 'abalone', 'acme', 'add', 'aerate']
In [2]: x.sort(key=len)
In [3]: x
Out[3]: ['add', 'acme', 'aerate', 'abalone', 'aardvark']
In [4]: x.sort(key=len,reverse=True)
In [5]: x
Out[5]: ['aardvark', 'abalone', 'aerate', 'acme', 'add']
列表的嵌套
import pprint
li1 = [
[1, 2, 3],
[2, 3, 4],
[3, 4, 5]
]
li2 = [
[2, 3, 4],
[1, 2, 3],
[1, 2, 3]
]
# numpy, pandas, matplotlib
result = [
[0, 0, 0],
[0, 0, 0],
[0, 0, 0]
]
# i : 0, 1, 2
for i in range(len(li1)):
# j: 0, 1, 2
for j in range(len(li1[i])):
# [0][0], [0][1], [0][2]
# [1][0]
result[i][j] = li1[i][j] + li2[i][j]
pprint.pprint(result)
栈与队列
队列:先进先出 FIFO
栈:先进后出 FILO
对栈的管理
info = """
栈的管理
1).入栈
2).出栈
3).获取栈定元素
4).栈长度
5).栈是否为空
6).退出
"""
stack = []
print info
while True:
choice = raw_input("\n请输入选项:")
if choice == '1':
item =raw_input("请输入你要添加的元素:")
stack.append(item)
print "入栈成功!"
elif choice == '2':
if not stack: #判断是否为空 默认返回布尔值
item = stack.pop()
print "%s出栈成功" %(item)
else:
print "栈为空!!"
elif choice == '3':
if stack !=[]:
print "栈顶元素为:", stack[-1]
else:
print "栈为空"
elif choice == '4':
print "栈的长度为:", len(stack)
elif choice == '5':
if stack:
print stack
print "栈不为空,栈的元素为:",
for i in stack:
print i,
else:
print "栈为空!"
elif choice == '6':
exit()
else:
print '请输入正确的选项!'
_is和==的区别
-
is
:表示的是对象标识符;表示两个变量的值是否在同一块内存空间; -
==
:表示的是值是否相等;
注:小整数在内存中已经存好的,所以不用再占用别的内存空间。而比较大的整数没有在内存中储存。
深拷贝与浅拷贝
li = [1,2,3,4]
#
# 不是拷贝, 是将li1的指向li的内存位置;
li1 = li
print(li1 is li)
浅拷贝
切片方法进行浅拷贝
li2 = li[:]
print(li2 is li)
li2.append(5)
print(li)
print(li2)
不能将列表中嵌套的数据类型拷贝出来,只能重新定义一个指向,指向原来的嵌套中的数据类型
li = [1, 2, 3, [2, 3]]
li3 = li[:]
print(li3 is li)
print(li3[-1][0] is li[-1][0])
导入模块进行拷贝
import copy
li = [1, 2, 3, [2, 3]]
li3 = copy.copy(li)
print(li3 is li)
print(li3[-1] is li[-1])
深拷贝
将拷贝对象的所有元素都拷贝出来,放进别的内存空间,而不像浅拷贝,只拷贝指向
import copy
li = [1, 2, 3, [2, 3]]
li4 = copy.deepcopy(li)
print(li is li4)
print(li[-1] is li4[-1])