Python_面向对象_list

--列表相关操作

#列表拼接
#列表的重复
#列表的索引
#列表的修改
#列表的切片

"""
# 字符串跟元祖相似 只能获取,不能修改
strvar = "abcdef"
strvar[0] = "你好"
print(strvar)
"""
#列表拼接
list1 = [1,2,3]
list2 = [4,5,6]
res = list1+list2
print(res)

#列表的重复
list1 = ["脏煎饼","大西瓜"]
res = list1 * 3
print(res)

#列表的索引

# 0 1 2 3
listvar = ["黑山","白云","淑芬","皇后娘娘"]
# -4 -3 -2 -1

print(listvar[-1])

#列表的修改
listvar[-1] = "味之源"
print(listvar)


语法[::] 完整格式:[开始索引:结束索引:间隔值]
  (1)[开始索引:] 从开始索引截取到列表的最后
  (2)[:结束索引] 从开头截取到结束索引之前
  (3)[开始索引:结束索引] 从开始索引截取到结束索引之前
  (4)[开始索引:结束索引:间隔值] 从开始索引截取到结束索引之前按照指定的间隔截取列表值
  (5)[:]或[::] 截取所有列表数据
#列表的删除

#列表的切片
listvar = ["李阳","曾线","陈家洛","牟梦坤","牟梦坤1","牟梦坤2"]
#(1)[开始索引:] 从开始索引截取到列表的最后
res = listvar[1:]
print(res)

#(2)[:结束索引] 从开头截取到结束索引之前
res = listvar[:-1]
print(res)

#(3)[开始索引:结束索引] 从开始索引截取到结束索引之前
res = listvar[-3:-1]
print(res)

#(4)[开始索引:结束索引:间隔值] 从开始索引截取到结束索引之前按照指定的间隔截取列表值
res = listvar[0:6:2]
print(res)

#(5)[:]或[::] 截取所有列表数据
# res = listvar[:]
res = listvar[::]
print(res)

#列表的删除 del 关键字
listvar = ["李阳","曾线","陈家洛","牟梦坤","牟梦坤1","牟梦坤2"]
#(1) 删除单个元素
# del listvar[-1]
# print(listvar)

#(2) 删除切片后的元素
del listvar[-2:]
print(listvar)

#(3) 删除所有列表
del listvar
# print(listvar)

--成员检测

"""
  检测一个数据是否在列表中
  格式:值 in 列表
  结果:布尔值

  检测一个数据是否不在列表中
  格式:值 not in 列表
  结果:布尔值
"""

listvar = ["张三","李四","王五","赵云","钱多多","孙悟空"]
res = "王五" in listvar
print(res)

res = "八哥" not in listvar
print(res)


--列表的相关函数

**append()**
```
  功能:向列表的末尾添加新的元素
  格式:列表.append(值)
  返回值:None
  注意:新添加的值在列表的末尾,该函数直接操作原有列表
```

**insert()**
```
  功能:在指定索引之前插入元素
  格式:列表.insert(索引,值)
  返回值:None
  注意:直接改变原有列表
```

**extend()**
```
  功能:将一个列表继承给另一个列表
  格式:列表.extend(序列)
  返回值:None
  注意:直接改变原有列表
```

**pop()**
```
  功能:通过指定的索引在列表中移除一个元素
  格式:列表.pop(索引)
  返回值:删除的元素
  注意:没有指定索引,默认移除最后一个元素
```

**remove()**
```
  功能:通过给予的值来删除,如果多个相同元素,默认删除第一个
  格式:列表.remove(值)
  返回值:无
  注意:如果有索引的情况推荐使用POP移除,效率高于remove,但remove可以用于无序容器类型
```

**index()**
```
  功能:获取某个值在列表中的索引
  格式:列表.index(值[,start][,end]) # [] 表达参数可选项
  返回值:找到返回索引 找不到报错
  注意:不存在抛出异常错误!
```

**count()**
```
  功能:计算某个元素出现的次数
  格式:列表.count(值)
  返回值:次数
```

**sort()**
```
  功能:列表排序
  格式:列表.sort() 按照从小到大排序(数字)
  格式:列表.sort(reverse=True) 按照从大到小排序(数字)
  格式:列表.sort(key=函数) 把值通过函数处理之后在从小到大排序
  格式:列表.sort(key=函数,reverse=True) 把值通过函数处理之后在从大到小排序

  返回值:None
  注意:直接更改原列表
  与高阶函数sorted相比: sort更改原列表
  sorted不更改原列表,返回新列表
```

**reverse()**
```
  功能:列表反转操作
  格式:列表.reverse()
  返回值:None
  注意:直接更改原列表
```

#**clear**
```
  功能:清空列表
  格式:列表.clear()
  返回值:空列表
```

#import copy | copy模块中有 浅拷贝 和 深拷贝
"""
  #浅拷贝: 浅拷贝只拷贝外层列表 内层列表跟随原列表进行改变
  #深拷贝: 拷贝整个列表 内外列表都不跟随原列表进行改变
  #**深拷贝copy.deepcopy(listvar)**
  #**浅拷贝copy.copy(listvar) 或者 listvar.copy()**
  注意:copy模块的copy方法 和 python内置的函数copy一样 都是浅拷贝
"""

#--列表的相关函数
#**append()**
listvar = [1,2,3]
res = listvar.append(4)
print(listvar) #[1, 2, 3, 4]
print(res)   # None


#**insert()**
listvar = [1,2,3,4,5]
res = listvar.insert(2,"我爱北京天安门")
print(listvar)
print(res)

#**extend()**
list1 = ["杨玉环","貂蝉"]
list2 = ["潘金莲"]

res = list2.extend(list1)
print(list2)
print(res)


#**pop()**
listvar = [7,2,1,9]
"""
res = listvar.pop(-2)
print(listvar) #[7, 2, 9]
print(res) #1
"""
res = listvar.pop()
print(listvar)
print(res)


#**remove()**
#(1)
listvar = [1,2,3,4]
res = listvar.remove(3)
print(listvar)
print(res)
#(2) 如果有多个相同的值, 默认删除第一个
listvar = [1,2,3,4,5,3,7,8,9]
res = listvar.remove(3)
print(listvar)
print(res)


#**index()**
listvar = ["张三","李四","王五","赵云","钱多多","孙悟空"]
# 如果不存在该值 则报错 ValueError
suoyinhao = listvar.index("李四4")
print(suoyinhao)

suoyinhao = listvar.index("李四",listvar.index("李四")+1)
# suoyinhao = listvar.index("李四",listvar.index("李四")+1,listvar.index("李四")+2)
print(suoyinhao)

#**count()**
listvar = [1,7,3,2,4,6,2,3,11,22,2]
res = listvar.count(2)
print(res)


#**sort()**
listvar = [7,3,8,1]
res = listvar.sort()
print(listvar)
print(res)

# 通过reverse=True 进行降序
res = listvar.sort(reverse=True)
print(res)
print(listvar)

print("<>")
listvar = [7,3,8,1]
res = sorted(listvar)
print(listvar)
print(res)

#练习 按照字母排序

listvar = [
{"name":"dalinzi","age":11},
{"name":"cerry","age":12},
{"name":"bobo","age":13},
{"name":"aniol","age":14}
]

listvar.sort(key=lambda x:x['name'])
print(listvar)

#**reverse()**
listvar = [78,34,11,55]
res = listvar.reverse()
print(listvar)
print(res)

#**clear**
listvar = [78,34,11,55]
res = listvar.clear()
print(listvar)
print(res)

 

"""
  #浅拷贝: 浅拷贝只拷贝外层列表 内层列表跟随原列表进行改变
  #深拷贝: 拷贝整个列表 内外列表都不跟随原列表进行改变
  #**深拷贝copy.deepcopy(listvar)**
  #**浅拷贝copy.copy(listvar) 或者 listvar.copy()**
  注意:copy模块的copy方法 和 python内置的函数copy一样 都是浅拷贝
"""

# 深拷贝 和 浅拷贝
"""
# 这样的缘起 我们怎么办?
listvar = [1,2,3]
listvar2 = listvar
print(listvar2)
listvar.append(4)
print(listvar)
print(listvar2)
listvar2.append(5)
print(listvar)
print(listvar is listvar2)
"""
"""
a = 5
b = a
a +=1
print(b)
"""


# 案例2 copy
listvar = [1,2,3]
# listvar2 = []
listvar2 = listvar.copy()
print(listvar2)
listvar.append(4)
print(listvar)
print(listvar2)

# 案例3 copy
listvar = [1,2,3,[4,5]]
listvar2 = listvar.copy()
listvar.append(6)
print(listvar2) #[1, 2, 3, [4, 5]]
print(listvar) #[1, 2, 3, [4, 5], 6]
listvar[3].append(7)
print(listvar2)
print(listvar)

# 案例4 浅拷贝
"""
copy模块的copy方法

python内置的函数copy一样 都是浅拷贝
"""

import copy
#copy deepcopy
listvar = [1,2,3,[4,5]]
res = copy.copy(listvar)
print("<>")
print(res)
listvar[-1].append(8)
print(listvar)
print(res)

# 案例5 深拷贝
# 内层外层均拷贝出来 再也不受原列表影响了
#copy deepcopy
listvar = [1,2,3,[4,5]]
newlist = copy.deepcopy(listvar)
listvar[-1].append(9)
print(newlist)
print(listvar)
print(newlist is listvar)


--列表推导式
  #普通列表推导式
  #带有判断条件的列表推到式
  #多循环列表推到式
  #带有判断条件的多循环推到式

# 列表推导式
# 案例1
listvar = [1,2,3,4,5,6]
listvar2 = []
for i in listvar:
  res = i ** 2
  listvar2.append(res)
print(listvar2)

# 列表推导式里面只能是循环和判断 除此之外的任何语法都不行
res = [i ** 2 for i in listvar]
print(res)

# 带有判断条件的列表推到式
listvar = [1,2,3,4,5,6]
res = [i for i in listvar if i % 2 == 0]
print(res)

# 多循环列表推到式
list1 = ["火龙果","菠萝蜜","要钱树"]
list2 = ["栗子","鸡子","苹果"]
# list3 = []
"""
#原型:
for i in list1:
  for j in list2:
    if list1.index(i) == list2.index(j):
      list3.append(i+"---"+j)
print(list3)
"""
res = [ i+"---"+j for i in list1 for j in list2 ]
print(res)
#['火龙果---栗子', '火龙果---鸡子', '火龙果---苹果', '菠萝蜜---栗子', '菠萝蜜---鸡子', '菠萝蜜---苹果', '要钱树---栗子', '要钱树---鸡子', '要钱树---苹果']
# 火龙果---栗子 菠萝蜜---鸡子 要钱树---苹果

#带有判断条件的多循环推到式
res = [ i+"---"+j for i in list1 for j in list2 if list1.index(i) == list2.index(j)]
print(res)

练习

#(1).{'x': 'A', 'y': 'B', 'z': 'C' } 把字典写成x=A,y=B,z=C的列表推导式
# [x=A,y=B,z=C]
dictvar = {'x': 'A', 'y': 'B', 'z': 'C' }
#方法一
res = [i[0]+"="+i[1] for i in dictvar.items()]
#方法二
res = [a+"="+b for a,b in dictvar.items()]
print(res)

# (2).把列表中所有字符变成小写
listvar = ["ADDD","dddDD","DDaa","sss"]
res = [ i.lower() for i in listvar]
print(res)

#(3)求(x,y)其中x是0-5之间的偶数,y是0-5之间的奇数组成的元祖列表 (不包含5)
# (0 2 4) (1 3) x , y
res = [(x,y) for x in range(0,5) if x % 2 == 0 for y in range(0,5) if y % 2 == 1]
print(res)


#(4).使用列表推导式 制作所有99乘法表中的运算
"""
for i in range(1,10):
for j in range(1,10):
if j<=i:
print("%d*%d =%2d "%(i,j,i*j),end="")
print()
"""
res = ["%d*%d =%2d "%(i,j,i*j) for i in range(1,10) for j in range(1,10) if j <= i ]
print(res)


#(5)#求M,N中矩阵和元素的乘积
# M = [ [1,2,3], 
#    [4,5,6], 
#    [7,8,9] ] 

# N = [ [2,2,2], 
#    [3,3,3], 
#    [4,4,4] ] 


"""
row 0 col 0
row 0 col 1
row 0 col 2

row 1 col 0
row 1 col 1
row 1 col 2

row 2 col 0
row 2 col 1
row 2 col 2
"""


M = [ [1,2,3],[4,5,6],[7,8,9]]
N = [ [2,2,2],[3,3,3],[4,4,4]]
res = [M[row][col] * N[row][col] for row in range(0,3) for col in range(0,3)]
#[2, 4, 6, 12, 15, 18, 28, 32, 36]
print(res)


#[[2, 4, 6], [12, 15, 18], [28, 32, 36]]
res = [ [ M[row][col] * N[row][col] for col in range(0,3) ] for row in range(0,3)]
print(res)

猜你喜欢

转载自www.cnblogs.com/bling-bling-star/p/9382889.html