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 转换为表达式字符串
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]
  • numpy.concatenate((a1,a2,.....),axis = 0)函数。

能够一次完成多个数组的拼接。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.extend(seq)

用于在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)。

list['a','b']
list.extend(['c','d'])
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']
a2.extend('2')
print(a2)
a2.extend('23')
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() 另一篇博文有介绍排序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值