python数组的复制与列表中的pop
作者:hqx 发布时间:2021-07-10 12:05:24
让我们看看如何在 Python 中复制数组。 有 3 种复制数组的方法:
只需使用赋值运算符。
浅拷贝
深拷贝
1 使用赋值运算符
我们可以使用赋值运算符 (=) 创建数组的副本。
语法:
new_arr = old_ arr
在 Python 中,Assignment
语句不复制对象,它们在目标和对象之间创建绑定。 当我们使用 = 运算符时,用户认为这会创建一个新对象; 好吧,事实并非如此。 它只创建一个共享原始对象引用的新变量。
示例:
from numpy import *
arr1 = array([2, 6, 9, 4])
print(id(arr1))
arr2 = arr1
print(id(arr2))
arr1[1] = 7
print(arr1)
print(arr2)
我们可以看到两个数组都引用了同一个对象。
2 浅拷贝
一个浅副本意味着构造一个新的集合对象,然后用对原始中找到的子对象的引用填充它。 复制过程不会重复,因此不会创建子对象本身的副本。 在浅拷贝的情况下,对象的引用被复制在另一个对象中。 这意味着对对象的副本所做的任何更改都会在原始对象中反映。 我们将使用视图view()函数来实现浅副本。
示例:
from numpy import *
arr1 = array([2, 6, 9, 4])
print(id(arr1))
arr2 = arr1.view()
print(id(arr2))
arr1[1] = 7
print(arr1)
print(arr2)
这次虽然2个数组引用了不同的对象,但在更改一个数组值的时候,另一个的值也被更改。
3 深度拷贝
深度拷贝是一个过程,其中复制过程递归地发生。 它意味着首先构建一个新的存储对象,然后用原稿中找到的子对象的副本递归地填充它。 在深度拷贝的情况下,将对象的副本复制到另一个对象中。 这意味着对对象的副本所做的任何更改都不反映在原始对象中。 我们将使用copy()函数来实现深度副本。
示例:
from numpy import *
arr1 = array([2, 6, 9, 4])
print(id(arr1))
arr2 = arr1.copy()
print(id(arr2))
arr1[1] = 7
print(arr1)
print(arr2)
这次在一个数组中所做的更改不会映射在其他数组中。
4 深度拷贝进阶
如果您正在处理numpy矩阵,则numpy.copy()将为您提供深度拷贝。 但是,如果您的矩阵是列表的列表,那么请考虑旋转图像90度的任务中使用以下方法:
示例:
import copy
def rotate_matrix(image):
copy_image_one = copy.deepcopy(image)
print("Original", matrix)
print("Copy of original", copy_image_one)
N = len(matrix)
for row in range(N):
for column in range(N):
copy_image_one[row][column] = image[row][N-column-1]
print("After modification")
print("Original", matrix)
print("Copy", copy_image_one)
copy_image_two = [list(row) for row in copy_image_one]
for row in range(N):
for column in range(N):
copy_image_two[column][row] = copy_image_one[row][column]
return copy_image_two
if __name__ == "__main__":
matrix = [[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]
print("Rotated image", rotate_matrix(matrix))
Python列表POP()是Python中的内置函数,该函数删除并返回列表或给定索引值的最后一个值。
语法:
list_name.pop(index)
参数:
index(可选) - 弹出并删除索引处的值。 如果未给出索引,则会弹出并删除最后一个元素。
返回值:列表中的最后一个值或给定的索引值。
例外:当索引超出范围时,它会返回IndexError
。
例一:
list1 = [ 1, 2, 3, 4, 5, 6 ]
print(list1.pop())
print("New List after pop : ", list1, "\n")
list2 = [1, 2, 3, ('cat', 'bat'), 4]
print(list2.pop())
print(list2.pop())
print(list2.pop())
print("New List after pop : ", list2, "\n")
例二:
list1 = [ 1, 2, 3, 4, 5, 6 ]
print(list1.pop(), list1)
print(list1.pop(0), list1)
例三:
list1 = [ 1, 2, 3, 4, 5, 6 ]
print(list1.pop(8))
例四:
fruit = [['Orange','Fruit'],['Banana','Fruit'], ['Mango', 'Fruit']]
consume = ['Juice', 'Eat']
possible = []
for item in fruit :
for use in consume :
item.append(use)
possible.append(item[:])
item.pop(-1)
print(possible)
来源:https://blog.51cto.com/u_14857544/5177095


猜你喜欢
- 性能监控一、web项目(如gin中)1.使用ginpprofimport "github.com/DeanThompson/gin
- python2.7wget http://www.python.org/ftp/python/2.7.6/Python-2.7.6.tar.
- 前言说起面试,很多同学都经历过,但是 面试中 可能会遇到各种问题,MySQL 的问题 也是非常多,最近我也经常面试,也希望问一些数据库一些偏
- 1.0 创建存储过程和函数创建存储过程和函数就是将经常使用的一组 SQL 语句组合在一起,并将这些 SQL 语句当作一个整体存储
- Python 正则表达式正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。Python 自1.5版本起增加了
- 1.依次安装python2和python3,并添加到系统环境变量中2.找到python3的安装目录,一般在C:\Users\Administ
- 对于管理系统,常常需要展示列表数据,我们对于列表内的数据常常需要查找、过滤、排序等操作,其中查找等操作大部分是在后台进行的。django r
- 学习vue和nodejs的过程当中,涉及到了axios,今天为了测试,写了get和post两个方法来跟node服务端交互,结果因为heade
- Python中进行Base64编码和解码要用base64模块,代码示例:#-*- coding: utf-8 -*-import base6
- 本文实例讲述了python中sleep函数用法。分享给大家供大家参考。具体如下:Python中的sleep用来暂停线程执行,单位为秒#---
- 这里是WMP的版本ClassID,从WMP7后ID就成了clsid:6BF52A52-394A-11D3-B153-00C04F79FAA6
- 功能输入一个特定格式的时间戳,自动获取前进或者后退多少小时之后的时间附加函数时间戳转换函数def date_time_str_to_long
- 案例展示电影详情,传递电影的id.从search.vue传递到movie.vuemethods: {showMovie(e){var tra
- 早听说用python做网络爬虫非常方便,正好这几天单位也有这样的需求,需要登陆XX网站下载部分文档,于是自己亲身试验了一番,效果还不错。本例
- 如下所示:a = [1,2,3,4,5,6,7,8,9,10,11]step = 3b = [a[i:i+step] for i in ra
- FORMAT() 函数用于对字段的显示进行格式化。SQL FORMAT() 语法SELECT FORMAT(column_name,form
- 概念:通配符(wildcard)即:用来匹配值的一部分的特殊字符。搜索模式(search pattern)即:由字面值、通配符或两者组合构成
- 本文实例讲述了Go语言转换所有字符串为大写或者小写的方法。分享给大家供大家参考。具体如下:Go语言的string模块包含了ToLower和T
- 01 并行复制的概念 在MySQL的主从复制架构中,主库上经常会并发的执行很多SQL,只要这些SQL没有产生锁等待,
- 这篇文章主要介绍了python中如何使用insert函数,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的