这点颇为让人头疼,最主要的问题是一些其他的常见库,比如numpy的数组,它添加了一些python原版列表没有的用法,然而我们经常忘了原版列表其实是没有这些用法的,导致程序错误。
numpy可以把取所有维度的操作放到一个方括号里,然而python原版list不行:
# numpy数组
import numpy as np
a = np.random.randn(3,4)
print(a)
# [[ 1.4535828 0.26964621 -0.48345505 -0.12031992]
# [ 0.61212023 0.88284351 0.65025632 -0.23002265]
# [ 0.8213387 0.6867936 0.00451447 -0.94561089]]
print(a[1,1]) # 0.8828435074881348
print(a[:,1]) # [0.26964621 0.88284351 0.6867936 ]
print(a[2]) # [ 0.8213387 0.6867936 0.00451447 -0.94561089]
# python原版列表
b = a.tolist()
print(b)
# [[1.4535828000665305, 0.26964620951449286, -0.4834550466536358, -0.12031991559977556],
# [0.6121202339096959, 0.8828435074881348, 0.6502563210389117, -0.23002264849652684],
# [0.8213387007918898, 0.6867936010249093, 0.00451446729164186, -0.9456108902605519]]
print(b[1][1]) # 0.8828435074881348
print(b[1][:]) # [0.6121202339096959, 0.8828435074881348, 0.6502563210389117, -0.23002264849652684]
print(b[:][1]) # [0.6121202339096959, 0.8828435074881348, 0.6502563210389117, -0.23002264849652684]
print(b[2]) # [0.8213387007918898, 0.6867936010249093, 0.00451446729164186, -0.9456108902605519]
首先我们可以看出原版list显示的数据长度比numpy更长
原版list不能出现a[1,1]这种写法,只能写成b[1][1]这样
其次是原版list必须在前面的维度指定数字,比如b[1][:],就是取第一行,而原版list不能直接取一列,你写b[:][1]输出的结果还是第一行,而不是第一列。