5.12 拷贝
5.12.1 直接引用(赋值)
list_1 = [1,2,3,[4,5]]
#引用
list_2 = list_1
print(list_2)
print(id(list_1))
print(id(list_2))
print('#############更改list1')
list_1[0] = 100
print('list1',list_1)
print('list2',list_2)
注意点:
list1和list2都是指向相同的地址,所以更改其中的一个列表其他的列表也会发生变化
5.12.2 list自带的拷贝
list_1 = [1,2,3,[4,5]]
list_2 = list_1.copy()
print(id(list_1))
print(id(list_2))
注意点:
1、拷贝完成之后的列表,与原始列表是不同的列表
5.12.3 浅拷贝
list_1 = [1,2,3,[4,5,[1,2]]]
list_2 = list_1.copy()
print(id(list_1))
print(id(list_2))
list_1[0] = 100
print(list_1)
print(list_2)
list_1[3][0] = 1
print(list_1)
print(list_2)
print(id(list_1[3]))
print(id(list_2[3]))
5.12.4 深拷贝
import copy
list_1 = [1,2,3,[4,5,[1,2]]]
list_2=copy.deepcopy(list_1)
print(id(list_1))
print(id(list_2))
list_1[0] = 100
print(list_1)
print(list_2)
list_1[3][0] = 1
print(list_1)
print(list_2)
print(id(list_1[3]))
print(id(list_2[3]))
list_1[3][2][0] = 2
print(list_1)
print(list_3)
注意点:
ID地址不同,子对象ID也不相同深拷贝会创建一个跟原来列表完全没有关系的列表,他们的列表对象和子对象都是不同的,他们的操作也是不同的,是完全独立的
5.13 排序
sort()
def sort(self, *args, **kwargs): # real signature unknown
""" Stable sort *IN PLACE*. """
pass
注意点:
1、没有返回值,在原始数据上做的排序
2、默认的排序方式是从小到大,如果指定reverse=True,则排序变为从大到小
soretd()
def sorted(*args, **kwargs): # real signature unknown
"""
Return a new list containing all items from the iterable in ascending order.
A custom key function can be supplied to customize the sort order, and the
reverse flag can be set to request the result in descending order.
"""
pass
注意点:
不在原始数据上,返回一个新的列表
5.14 逆置
reverse()
def reverse(self, *args, **kwargs): # real signature unknown
""" Reverse *IN PLACE*. """
pass
注意点:
只是一个方法实现逆置,没有返回值,所以是在当前数据上做操作
reversed()
class reversed(object):
""" Return a reverse iterator over the values of the given sequence. """
注意点:生成器是特殊的迭代器(一边生成一边循环;可以有效节省计算机资源;保存的不是数据而是算法)
返回一个迭代器对象
如果需要访问可以使用的是for循环来获取
问题
def Bra(i1,i2,i3,i4,j1,j2,j3,list_3):
list_2 = ['%s%s%s%s%s%s%s','(%s%s%s)%s%s%s%s','%s%s(%s%s%s)%s%s','%s%s%s%s(%s%s%s)','(%s%s%s%s%s)%s%s','%s%s(%s%s%s%s%s)','((%s%s%s)%s%s)%s%s','(%s%s%s)%s(%s%s%s)','(%s%s(%s%s%s))%s%s','%s%s((%s%s%s)%s%s)','%s%s(%s%s(%s%s%s))']
list_4 = [i1, i2, i3, i4]
for k in list_2:
try:
ret1 = eval(k%(i1,j1,i2,j2,i3,j3,i4))
except:
pass
if list_4 in list_3:
break
if ret1 == 24:
print(i1,i2,i3,i4)
print(k%(i1,j1,i2,j2,i3,j3,i4))
list_3.append(list_4)
def Oper(i1,i2,i3,i4,list_3):
list_1 = ['+','-','*','/']
for j1 in list_1:
for j2 in list_1:
for j3 in list_1:
Bra(i1,i2,i3,i4,j1,j2,j3,list_3)
def Num(list1,list_3):
if isinstance(list1,list):
pass
else:
print("你的输入有误")
if len(list1)<4:
print('您输入的数据不够')
list_2 = list1.copy()
for i1 in list_2:
for i2 in list_2[(list_2.index(i1)+1):]:
for i3 in list_2[(list_2.index(i2)+1):]:
for i4 in list_2[(list_2.index(i3)+1):]:
Oper(i1,i2,i3,i4,list_3)
list1 = [1,2,3,4,5,6,7,8,9,10,11,12,13]
list_3 = []
Num(list1,list_3)
print(list_3)