当前位置: 首页 > news >正文

《Python 3 基础》- numpy的array,python的list、tuple的区别与联系再辨析

这里写自定义目录标题

    • 一、基本认识
    • 二、list与传统数组(以C++为例)的联系与区别
    • 三、1维list切片规则
    • 四、2维list类似于2维数组,但表达方式需适应
    • 五、list与元组的联系与区别
      • 1. tuple的创建方法类似于list,tuple用()表示
      • 2. tuple增加元素的方法

一、基本认识

  1. Python本身没用传统意义上的数组,但暂可把list看作数组(数组每个元素类型可以是任意的,不需要是同一类型),但是,也牺牲了数组的高效性

  2. 需要利用传统数组的高效性,可在Python中import numpy的array

接下来从操作层面先认识一下list、tuple与传统数组的联系与区别

二、list与传统数组(以C++为例)的联系与区别

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 "<pyshell#0>", 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 "<pyshell#26>", 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 "<pyshell#30>", 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()

三、1维list切片规则

如:>>> 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'
>>> 

四、2维list类似于2维数组,但表达方式需适应

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 "<pyshell#42>", line 1, in <module>A.extend(b)
NameError: name 'b' is not defined
>>> A.extend(B)
>>> A
['a', 'b', 'a', 60, 20]
>>> 

五、list与元组的联系与区别

tuple一旦创建,它就不能改变了,也就是说它也没有 append(),insert() 这样的方法,但它也有获取某个索引值的方法,但是不能赋值。那么为什么要有 tuple 呢?那是因为 tuple 是不可变的,所以代码更安全。函数经常返回tuple。

1. tuple的创建方法类似于list,tuple用()表示

>>> tup=('aly',x)
>>> tup[1]
2
>>> x=[3]    
>>> tup[1]   #没修改成功
2
>>> 

2. tuple增加元素的方法

list可以用自己的append()来添加元素。
Python元组是一种不可变的有序集合。
方法一:
在Python中,元组和字符串一样,支持“+”、“+=”运算符进行拼接操作。因此,可以通过将一个元组与一个元素的元组相加.

>>> t=(1,)
>>> t1=(a,b)
Traceback (most recent call last):File "<pyshell#3>", line 1, in <module>t1=(a,b)
NameError: name 'a' is not defined
>>> t1=('a','b')
>>> t2=t1+t
>>> t2
('a', 'b', 1)
>>> 

方法二:
先转成list利用list的append增加元素,再转回tuple

>>> t2
('a', 'b', 1)
>>> list1=list(t2)
>>> list1.append(5)
>>> t3=tuple(list1)
>>> t3
('a', 'b', 1, 5)
>>> 

方法三:
使用元组解包,这个方法的特点:可以把元组元素设成某个变量,添加进元组

>>> t3
('a', 'b', 1, 5)
>>> var=10
>>> t4=(*t3,var)
>>> t4
('a', 'b', 1, 5, 10)
>>> 

相关文章:

  • 【C++ 程序设计入门基础】- 第4节-函数
  • 分布式搜索引擎--认识
  • 【设计模式】01-前言
  • Spring集成
  • 【镜像制作】OS云主机镜像的制作——以H3C为例
  • SAP 中销售订单占用库存和交货单占用库存取值
  • PaddleSeg的训练与测试推理全流程(超级详细)
  • PHP项目如何自动化测试
  • 机器学习之集成学习概念介绍
  • 导航与定位技术已成为移动机器人的核心技术之一
  • java SSM物业管理系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计
  • MStart | MStart开发与学习
  • 系列六、Spring Security中的认证 授权 角色继承
  • 从0到1:如何建立一个大规模多语言代码生成预训练模型
  • 微信小程序支付之V2支付
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • 【刷算法】求1+2+3+...+n
  • Apache的80端口被占用以及访问时报错403
  • C# 免费离线人脸识别 2.0 Demo
  • HTTP中的ETag在移动客户端的应用
  • laravel5.5 视图共享数据
  • mysql常用命令汇总
  • Python利用正则抓取网页内容保存到本地
  • SpiderData 2019年2月16日 DApp数据排行榜
  • 从零到一:用Phaser.js写意地开发小游戏(Chapter 3 - 加载游戏资源)
  • 动态魔术使用DBMS_SQL
  • 分布式事物理论与实践
  • 基于MaxCompute打造轻盈的人人车移动端数据平台
  • 聚类分析——Kmeans
  • 看完九篇字体系列的文章,你还觉得我是在说字体?
  • 快速体验 Sentinel 集群限流功能,只需简单几步
  • 手写双向链表LinkedList的几个常用功能
  • 我是如何设计 Upload 上传组件的
  • 学习笔记TF060:图像语音结合,看图说话
  • 最简单的无缝轮播
  • gunicorn工作原理
  • NLPIR智能语义技术让大数据挖掘更简单
  • 积累各种好的链接
  • 完善智慧办公建设,小熊U租获京东数千万元A+轮融资 ...
  • ​html.parser --- 简单的 HTML 和 XHTML 解析器​
  • ​io --- 处理流的核心工具​
  • #NOIP 2014# day.1 生活大爆炸版 石头剪刀布
  • ()、[]、{}、(())、[[]]命令替换
  • (01)ORB-SLAM2源码无死角解析-(66) BA优化(g2o)→闭环线程:Optimizer::GlobalBundleAdjustemnt→全局优化
  • (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (22)C#传智:复习,多态虚方法抽象类接口,静态类,String与StringBuilder,集合泛型List与Dictionary,文件类,结构与类的区别
  • (论文阅读30/100)Convolutional Pose Machines
  • (免费领源码)Java#ssm#MySQL 创意商城03663-计算机毕业设计项目选题推荐
  • (七)c52学习之旅-中断
  • (转)关于如何学好游戏3D引擎编程的一些经验
  • (轉貼) UML中文FAQ (OO) (UML)
  • ***微信公众号支付+微信H5支付+微信扫码支付+小程序支付+APP微信支付解决方案总结...
  • .htaccess配置重写url引擎
  • .NET Core 通过 Ef Core 操作 Mysql
  • .net 提取注释生成API文档 帮助文档