Python本身没用传统意义上的数组,但暂可把list看作数组(数组每个元素类型可以是任意的,不需要是同一类型),但是,也牺牲了数组的高效性
需要利用传统数组的高效性,可在Python中import numpy的array
接下来从操作层面先认识一下list、tuple与传统数组的联系与区别
C++:
数组声明:typeName arrayName[arraySize]
如:float loans[20]
如果取元素,最基础的方法就是,按下标来操作,如:
float loans1=loan[0] #提取first alement
认识:与list容易混淆的是都用[ ],也是联系之处,但是大部分语言基础的数组都不支持动态增加元素,C++实现动态数组,可借助一些技术方法。
Python的list:
Python中列表(list)是一种有序、可变且可重复元素集合。
在list中的数据类型保存的是数据的存放的地址,简单的说就是指针,并非数据,这样保存一个list就太麻烦了,例如list1=[1,2,3,‘a’]需要4个指针和四个数据(引自:https://www.php.cn/faq/424062.html)
(其它可参考:https://blog.csdn.net/www_djh/article/details/134645540?spm=1001.2014.3001.5502)
牺牲了效率,增加了灵活性:
以下是关于Python列表的常见基本操作示例
list示例:
>>> stus=['x','=',2,y] #不需声明,直接赋值
Traceback (most recent call last):
File "" , line 1, in <module>
stus=['x','=',2,y]
NameError: name 'y' is not defined
>>> y=1
>>> stus=['x','=',2,y]
>>>
通过下标(index)取元素:
>>> y=1
>>> stus=['x','=',2,y]
>>> stus[0]
'x'
>>> stus[-1]
1
>>>
查看某元素值在list的个数
>>> stus.count(2)#因为直接输入元素本身,当本身是数值时,有时很难理解
1 #返回2这个元素出现了一次
>>>
查看某元素的index,若有多个仅返回第一个index
>>> stus.index(2) #元素2的index
3
>>>
在末端增加一个元素
>>> stus.append(10) #append每次只增加一个元素
>>> stus
['x', '=', 2, 1, 10]
>>>
>>> stus.append([11,12,13])
>>> stus
['x', '=', 2, 1, 10, [11, 12, 13]]
>>>
也可添加元组、集合等
>>> stus.append((11,12,13))
>>> stus
['x', '=', 2, 1, 10, [11, 12, 13], (11, 12, 13)]
>>> stus.append({11,12,13})
>>> stus
['x', '=', 2, 1, 10, [11, 12, 13], (11, 12, 13), {11, 12, 13}]
>>>
也可在指定下标处插入新值:
>>> stus.insert(0,3)
>>> stus
[3, 'x', '=', 2, 1, 10, [11, 12, 13], (11, 12, 13), {11, 12, 13}]
>>>
如果待插入的位置:正下标超出范围,则插在末端;负下标超出范围,则在最开始添加
删除最后一个元素:stus.pop()并返回被删除的元素
>>> stus.pop()
{11, 12, 13}
>>>
>>> stus.pop(1) #输入待删元素的index
'x'
>>>
用remove(元素),无返回
>>> stus
[3, '=', 2, 1, 10, [11, 12, 13], (11, 12, 13)]
>>> stus.remove(=)
SyntaxError: invalid syntax
>>> stus.remove("=")
>>> stus
[3, 2, 1, 10, [11, 12, 13], (11, 12, 13)]
>>>
用python 关键词(命令)del 删除某index的元素
>>> stus
[3, 2, 1, 10, [11, 12, 13], (11, 12, 13)]
>>> del stus[6]
Traceback (most recent call last):
File "" , line 1, in <module>
del stus[6]
IndexError: list assignment index out of range
>>> del stus[5]
>>> stus
[3, 2, 1, 10, [11, 12, 13]]
>>>
其它:
>>> stus.sort() #该list元素类型不支持排序
Traceback (most recent call last):
File "" , line 1, in <module>
stus.sort()
TypeError: '<' not supported between instances of 'list' and 'int'
>>>
倒序
>>> stus.reverse()
>>> stus
[[11, 12, 13], 10, 3, 2, 1]
>>>
清空
stus.clear()
如:>>> A
[‘a’, ‘b’, ‘a’, 60, 20]
则:A[::] 格式是 start_index:end_index:step
切片结果:包含 start_index元素,不包含end_index元素
因为step缺省为1,往往被省略所以常见A[:]
如: A[:] 取全list
A[:2] 从index=0取到index<2的元素
A[2:] 从index=2取到末尾
这个东东初学容易与字典混在一起:字典是包括在一对{ }内的
如:dict = {‘Alice’: ‘2341’, ‘Beth’: ‘9102’, ‘Cecil’: ‘3258’}
>>> dict = {'Alice': '2341', 'Beth': '9102', 'Cecil': '3258'}
>>> dict['Alice'] #也容易与在dataframe中的使用搞混,好难啊
'2341'
>>>
C++:
二维数组声明:typeName arrayName[rowSize][columnSize]
如:float loans[2][2]
而二维的list:
stuts_sheet=[[‘a’,‘b’],[60,20]]
取元素:
>>> stuts_sheet[0][0]
'a'
>>>
取行:
>>> stuts_sheet[0]
['a', 'b']
>>>
好像只能用代码实现取列,而且,list每行元素可以不一样长
如:
>>> stuts_sheet[0].append('a')
>>> stuts_sheet
[['a', 'b', 'a'], [60, 20]]
>>>
extend可以把两个list合并
>>> A=stuts_sheet[0]
>>> B=stuts_sheet[1]
>>> A.extend(b)
Traceback (most recent call last):
File "" , line 1, in <module>
A.extend(b)
NameError: name 'b' is not defined
>>> A.extend(B)
>>> A
['a', 'b', 'a', 60, 20]
>>>
tuple一旦创建,它就不能改变了,也就是说它也没有 append(),insert() 这样的方法,但它也有获取某个索引值的方法,但是不能赋值。那么为什么要有 tuple 呢?那是因为 tuple 是不可变的,所以代码更安全。函数经常返回tuple。
tuple的创建方法类似list只是用的()
>>> tup=('aly',x)
>>> tup[1]
2
>>> x=[3]
>>> tup[1] #没修改成功
2
>>>