Python 二维数组

栏目: Python · 发布时间: 6年前

内容简介:简单粗暴,不过太麻烦,一般不用。列表生成式即 List Comprehensions,是 Python 内置的非常简单却强大的可以用来创建list的生成式。举例,range 函数生成:
Python 二维数组学习。

直接创建法

简单粗暴,不过太麻烦,一般不用。

num = [[1,2,3],[4,5,6]]

列表生成式法

列表生成式即 List Comprehensions,是 Python 内置的非常简单却强大的可以用来创建list的生成式。

举例,range 函数生成:

>>>range(1, 11)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

如果要生成 [1x1, 2x2, 3x3, ..., 10x10]

>>>[x * x for x in range(1, 11)]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

相当于:

>>>L = []
>>>for x in range(1, 11):
...   L.append(x * x)
...
>>>L
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

还可以在后面加上判断来筛选出仅偶数的平方:

>>>[x * x for x in range(1, 11) if x % 2 == 0]
[4, 16, 36, 64, 100]

也可以使用两层循环,可以生成全排列:

>>>[m + n for m in 'ABC' for n in 'XYZ']
['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']

当然,最重要的是这里要讲的使用列表生成式来生成二维数组,例如生成 3 行 2 列的 0 数组:

>>>[[0 for i in range(2)] for j in range(3)]
[[0, 0], [0, 0], [0, 0]]

相当于:

>>>L = []
>>>for _ in range(3):
...    row = []
...    for _ in range(2):
...        row.append(0)
...    L.append(row)
...
>>>L
[[0, 0], [0, 0], [0, 0]]

错误的创建方法

list * n 的意思是 n 个 列表的 浅拷贝 的连接。例如, [[]] 是一个含有一个空列表元素的列表,所以 [[]]*3 表示 3 个指向这个空列表元素的引用,修改任何一个元素都会改变整个列表:

>>>L = [[]]*3
>>>L
[[], [], []]
>>>L[0].append(1)
>>>L
[[1], [1], [1]]

再例如,一维数组使用 * 是没有问题的:

>>>num = [[0]*2 for i in range(2)]
>>>print(num)
[[0, 0], [0, 0]]
>>>num[0][0] = 1
>>>print(num)	# 只改变了num[0][0]的值
[[1, 0], [0, 0]]

但是, 在创建二维数组时就需要特别注意,因为列表在 Python 中是可变对象,外部的 * 相当于浅拷贝二维数组的中的一维列表,因此,改变其中任意一个值,其他的浅拷贝都会被改变

>>>num = [[0]*2]*2	# 第二个 * 是浅拷贝
>>>print(num)
[[0, 0], [0, 0]]
>>>num[0][0] = 1
>>>print(num)	# num[0][0]和num[1][0]的值都被改变了
[[1, 0], [1, 0]]

numpy 创建

numpy 模块支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库

>>>import numpy as np
>>>L = np.array([[1,2,3],[4,5,6]], dtype=int)  # 创建2*3维数组
>>>L
array([[1, 2, 3],
       [4, 5, 6]])
>>>L.shape
(2, 3)
>>>L.size
6
>>>L.itemsize
4

利用特殊方法生成特殊的数组,例如生成 3 行 2 列的二维全 0 数组:

>>>import numpy as np
>>>np.zeros((3, 2), dtype=int)
array([[0, 0],
       [0, 0],
       [0, 0]])

生成 3 行 2 列的二维全 1 数组:

>>>import numpy as np
>>>np.ones((3, 2), dtype=int)
array([[1, 1],
       [1, 1],
       [1, 1]])

numpy 模块的功能十分强大,其他方法的使用可以查找其官方文档进行学习。


以上所述就是小编给大家介绍的《Python 二维数组》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

人人都是产品经理

人人都是产品经理

苏杰 / 电子工业出版社 / 2010年4月 / 45.00元

这是写给“-1到3岁的产品经理”的书,适合刚入门的产品经理、产品规划师、需求分析师,以及对做产品感兴趣的学生,用户体验、市场运营、技术部门的朋友们,特别是互联网、软件行业。作为一名“4岁的产品经理”,作者讲述了过去3年的经历与体会,与前辈们的书不同,本书就像你走到作者身边,说“嗨哥们!晚上有空吃个饭么,随便聊聊做产品的事吧”,然后作者说“好啊”。 书名叫“人人都是产品经理”,是因为作者觉得过......一起来看看 《人人都是产品经理》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

在线进制转换器
在线进制转换器

各进制数互转换器

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具