python基础——列表,数组,字典,元组
记录⾃⼰学习过程中遇到的困惑过的问题,以此谨记。
列表:可以完成⼤多数集合类的数据结构实现,⽀持字符,数字,字符串甚⾄可以包含列表(嵌套),⽤ [ ]标识,是Python最通⽤的符合数据类型,列表的切割也可以⽤到变量【头下标:尾下标】,从左到右索引默认0开始,从右到左-1开始
元组:⽤()标识,但不能⼆次赋值,相当于只读列表,不允许更新
字典:除列表以外python中最灵活的内置数据结构类型,列表是有序的对象集合,字典是⽆序的对象集
数组:下⾯有介绍
列表与字典之间的区别是:字典当中的元素是通过键来存取,⽽不是通过偏移存取
列表与数组之间的不同是:⼀个列表可以存放不同类型的数据,⽽⼀个数组只能存放相同的类型
在list中的数据类型保存的是数据的存放的地址,简单的说是指针,并⾮数据,
例如 list1 = [1,2,3,4]需要4个指针和四个数据,增加了存储和消耗,⽽array1 = numpy.array([1,2,3,4])只需
要存放四个数据,读取和计算更加⽅便,建议在纯数字时使⽤array
也正因为列表可以存放不同类型的数据,列表中每个元素的⼤⼩可以相同,也可以不同,也就不⽀持⼀次性读取⼀列,即使对于标准的⼆维数组列表。
读取列表的⼀列:
b = [x[0] for x in a]
print(b)
列表不能这样直接切⽚
>>> a=[[1,2,3], [4,5,6]] >>> a[:, 0]
# 尝试⽤数组的⽅法读取⼀列失败 TypeError: list indices must be integers or slices, not tupleke
读取数组某⾏某列
a = array([[0, 1, 2], [3, 4, 5], [6, 7, 8]])
矩阵的某⼀⾏: a[1] [3,4,5]
矩阵的某⼀列: a[:,1] [1,4,7]
b = array([[ 1., 0., 0.], [ 0., 1., 0.], [ 0., 0., 1.]])
把矩阵a的第2列赋值给矩阵b的第1列
b[:,0] = a[:,1]
array([[ 1., 0., 0.], [ 4., 1., 0.], [ 7., 0., 1.]])
数据类型之间的转化
int(x [,base ])将x转换为⼀个整数
long(x [,base ])将x转换为⼀个长整数
float(x )将x转换到⼀个浮点数
complex(real [,imag
创建⼀个复数
]
)
str(x )将对象 x 转换为字符串
repr(x )将对象 x 转换为表达式字符串python 定义数组
repr(x )将对象 x 转换为表达式字符串
eval(str )⽤来计算在字符串中的有效Python表达式,并返回⼀个对象
tuple(s )将序列 s 转换为⼀个元组
list(s )将序列 s 转换为⼀个列表
chr(x )将⼀个整数转换为⼀个字符
unichr(x )将⼀个整数转换为Unicode字符
ord(x )将⼀个字符转换为它的整数值
hex(x )将⼀个整数转换为⼀个⼗六进制字符串
oct(x )将⼀个整数转换为⼀个⼋进制字符串
数组:
数组转成列表
import numpy as np
a = np.array([1,2,5]) #定义数组
a_list = list(a) #数组转成列表
⼀些数组函数总结
numpy.append(arr,values, axis=None)函数。 (此函数也可⽤于list,但⽤法有点不同)
要么⼀个数组和⼀个数值,要么两个数组,不能三个及以上数组直接append拼接。始终返回⼀维数组。
有点类似列表的extend,都伸展开来了。
append⽤于list和append的区别是,⽤于list是在列表上添加新元素,⽤于array是将被⽤于append的数组都伸展成⼀维a = ['1.5','5.3','4.4','4.2','23.4']
a2 = np.array([[1,2,3],[4,5,6]])
b = np.array([[7,8,9],[10,11,12]])
x = np.array(a)
a.append(3) #list 的append⽤法
a.append('32.1') ['1.5', '5.3', '4.4', '4.2', '23.4', '32.1']
c = np.append(x, b) #⼀维和⼆维 #array的append的⽤法
c2 = np.append(a2,b) # ⼆维和⼆维
c3 = np.append(b,3) # ⼆维和数值
print(a)
print(c)
print(c2)
print(c3)
['1.5', '5.3', '4.4', '4.2', '23.4', 3]
['1.5' '5.3' '4.4' '4.2' '23.4' '7' '8' '9' '10' '11' '12']
[ 1 2 3 4 5 6 7 8 9 10 11 12]
[ 7 8 9 10 11 12 3]
能够⼀次完成多个数组的拼接。concatenate()效率更⾼,适合⼤规模的数据拼接
这个函数有点类似于list 的append,因为list可以存放不同数据类型,append进去的作为整体就会成为列表的⼀个新元素,不会像extend ⼀样拆开⼀个个的,⽽这⾥的concentrate函数会能按⾏按列合并,默认axis为0,(a,b)会将b加到a下⾯,=1,第⼀⾏是把所有数组的⼀⾏合并,b的第⼀⾏加到a的第⼀⾏后⾯
a2 = np.array([[1,2,3],[4,5,6]])
b = np.array([[7,8,9],[10,11,12]])
d = np.concatenate((a2,b))
d2 = np.concatenate((a2,b),axis=0)
d3 = np.concatenate((a2,b),axis=1)
print(d)
print(d2)
print(d3)
[[ 1 2 3]
[ 4 5 6]
[ 7 8 9]
[10 11 12]]
[[ 1 2 3]
[ 4 5 6]
[ 7 8 9]
[10 11 12]]
[[ 1 2 3 7 8 9]
[ 4 5 6 10 11 12]]
d4 = np.concatenate((d3, b)) 这个会报错,数组⾏列不⼀致
numpy.random.rand()
numpy.random.rand(d0,d1,...,dn)
np.random.rand(4,2) #⽣成4⾏2列数组
array([[ 0.02173903, 0.44376568],
[ 0.25309942, 0.85259262],
[ 0.56465709, 0.95135013],
[ 0.14145746, 0.55389458]])
np.random.rand(4,3,2) #shape: 4*3*2
numpy.random.randn()
np.random.randn() #当没有参数时,返回单个数据
np.random.randn(2,4) #shape: 2*4
numpy.range() 与numpy.arange()
range()不⽀持步长为⼩数,np.arange()⽀持步长为⼩数
两者都有三个参数,以第⼀个参数为起点,第三个参数为步长,截⽌到第⼆个参数之前的不包括第⼆个参数的数据序列
某种意义上,和STL中由迭代器组成的区间是⼀样的,即左闭右开的区间。[first, last)或者不加严谨地写作[first:step:last)
for i in range(5):
print(i)
#
for i in np.arange(0, 1, 0.5):
print(i)
for i in range(2,7):
print(i)
⼀些列表函数总结
⽤于在列表末尾⼀次性追加另⼀个序列中的多个值(⽤新列表扩展原来的列表)。
list['a','b']
len(list) 4
list.append(['e','f'])
len(list) 5
list[-1] ['e','f']
list ['a','b','c','d',['e','f']]
list.append()
a = ['1.5','5.3','4.4','4.2','23.4']
a.append('33.2')
print(a)
a2 = ['12.4','23.5']
print(a2)
print(a2)
['1.5', '5.3', '4.4', '4.2', '23.4', '33.2']
['12.4', '23.5', '2']
['12.4', '23.5', '2', '2', '3']
sort()和sorted() 另⼀篇博⽂有介绍
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论