python基础——列表,数组,字典,元组

本文深入探讨了Python中的数据结构,包括列表、元组、字典和数组的特点与使用方法,对比了列表与字典、数组的差异,介绍了数据类型的转换及数组操作函数,如append、concatenate等,同时涵盖了随机数生成、范围函数的应用,以及列表函数如extend和sort的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

记录自己学习过程中遇到的困惑过的问题,以此谨记。


  • 列表:可以完成大多数集合类的数据结构实现,支持字符,数字,字符串甚至可以包含列表(嵌套),用 [ ]标识,是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() 另一篇博文有介绍排序

### Python数组、字段和元组区别 #### 数组Python 中,数组通常指的是 `list` 或者 NumPy 库中的 `ndarray`。标准库中的列表可以存储不同类型的数据[^3]。 对于 NumPy 的数组来说,则更倾向于处理相同类型的数值数据,并提供高效的矩阵运算支持。创建一个简单的 NumPy 数组如下所示: ```python import numpy as np arr = np.array([1, 2, 3]) print(arr) ``` NumPy 数组还允许定义复杂结构的对象数组,例如包含元组的一维对象数组: ```python A = np.empty((2,), dtype=object) A[0], A[1] = (1, 'a'), ('b', 2) print(A) ``` 这展示了如何构建一个增强/降级的列表来容纳不同的元素组合[^1]。 #### 字段(字典Python 中并没有直接称为“字段”的内置类型;这里可能是指字典 (`dict`)。字典是一种键值对映射的数据容器模型,在其中每个 key 关联着唯一的 value 值。字典非常适合用于表示具有标签属性的数据集或配置项等场景。下面是一个简单例子展示字典的使用方式: ```python person_info = {"name": "Alice", "age": 30} print(person_info["name"]) ``` 字典的特点在于其内部实现采用了哈希表机制,从而使得查找操作非常高效。另外需要注意的是,自 Python 3.7 版本起,官方文档保证了 dict 类型保持插入顺序不变的行为特性。 #### 元组 元组是另一种序列化容器,类似于列表但是不可变——一旦创建就不能修改它的成员。这意味着不能向已存在的元组中添加新项目也不能从中移除已有项目。然而,如果元组内含有可变对象作为组件的话,那么这些子对象本身是可以被改变的。此外,当函数有多重返回值时实际上是作为一个整体即元组的形式给出的结果[^4]。 创建并访问元组的方式如下: ```python tup = ("apple", "banana", "cherry") print(tup[0]) # 输出 apple ``` 元组也常用来打包多个变量一起传递给其他地方而不必显式地声明一个新的类实例。 总结而言,数组适合于需要频繁随机存取以及执行大量算术计算的任务;而字典适用于快速检索关联信息的情况;至于元组则更多应用于那些希望保护数据完整性不允许随意更改的应用场合。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值