首页 > 编程语言 >python数组

python数组

时间:2023-07-29 12:34:37浏览次数:39  
标签:python 列表 models 数组 import array my

目录

​ 在编程中,数组是相同类型的元素的集合。数组在Java,C / C ++,JavaScript等大多数编程语言中都很流行。但是,在Python中,它们并不常见。人们经常谈论Python数组时,他们谈论的是Python列表。

1.Delphi定义数组

ZCYL_sx  :array[0..3] of double;

2.Python定义数组

(1)列表 的3种

我们可以将列表视为数组,但是,我们不能限制列表中存储的元素的类型:

a = [1, 3.5, "Hello"]
1)一维列表:
  • 创建一个3个元素的整数数组,所有元素都初始化为0:
a = [0]*3
a = [0,0,0]
a = [0 for _ in range(3)]  推荐

​ 这三种定义列表的方式都会得到相同的结果,都是定义一个包含三个整型数 0 的列表。然而,它们之间有微妙的区别:

  • a = [0]*3

    这种方式使用了简单的乘法操作符*来复制元素,创建了一个包含三个整型数 0 的列表。这种方式非常简洁,但需要注意的是,它复制了对同一个整型数 0 的引用,因此这三个元素在内存中实际上是相同的,如果修改其中一个元素,其他元素也会跟着改变。

  • a = [0,0,0]

    种方式直接列出了三个整型数 0 ,以逗号分隔,创建了一个包含三个整型数 0 的列表。每个元素都是独立的,互不影响。

  • a = [0 for _ in range(3)]

    这种方式使用列表推导式,在for _ in range(3)循环中重复生成了三个整型数 0,创建了一个包含三个整型数 0的列表。和第二种方式一样,每个元素都是独立的,互不影响。

2)多维列表:
  • 创建一个5行3列的整数数组,所有元素都初始化为0:
a_list = [[0]*3 for _ in range(5)]
a_list = [[0, 0, 0] for _ in range(5)]
a_list = [[0 for _ in range(3)] for _ in range(5)]

# 结果:[[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]

同理,三种方式对应不同的区别。

(2)array.array
  • array.array: 来自 Python 的 array 模块,它创建的数组是固定类型的数组,只能存储指定的数据类型;
  • 在创建数组时,需要明确指定数组的类型,例如 'd' 表示 double 类型,'i' 表示 int 类型等;
  • Python 的 array 模块提供的数组功能相对较简单,适用于简单的数值存储,不支持矢量化计算和广播运算;
  • 不需要额外的安装。您可以直接使用 import array

​ 如果使用array模块创建数组 ,则数组的所有元素必须为相同的数字类型:

import array as arr
a = arr.array('d', [1.1, 3.5, 4.5])
print(a)

​ 创建一个包含4个元素的 double 类型的数组,并初始化为空

import array as arr
a = arr.array('d', [0.0, 0.0, 0.0, 0.0]) 
print(a)

在这里,我们创建了一个float类型数组。字母'd'是类型代码。这确定了创建过程中数组的类型,常用的类型代码:

Code C 类型 Python 类型 最小字节
'b' signed char int 1
'B' unsigned char int 1
'u' Py_UNICODE Unicode 2
'h' signed short int 2
'H' unsigned short int 2
'i' signed int int 2
'I' unsigned int int 2
'l' signed long int 4
'L' unsigned long int 4
'f' float float 4
'd' double float 8

python数组知识详见:Python 数组 - 菜鸟教程 (cainiaojc.com)

(3)np.zeros
  • np.zeros 来自 NumPy 库,它创建的数组是 NumPy 数组(numpy.ndarray),可以存储不同数据类型的元素,例如整数、浮点数、布尔值等;
  • 可以通过指定参数 dtype 来设置数组的数据类型;
  • NumPy 库提供了丰富的功能和数学运算,适用于科学计算和数据处理。您可以对 NumPy 数组进行矢量化计算,广播运算等;
  • 需要确保安装了 NumPy 库pip install numpy,并且导入 import numpy as np
  • 创建一个5行3列的整数数组,所有元素都初始化为0:
import numpy as np
a_list = np.zeros((5, 3), dtype=int)

'''
结果:
[[0 0 0]
 [0 0 0]
 [0 0 0]
 [0 0 0]
 [0 0 0]]
'''

​ 你可以根据需要使用不同的整数类型,比如int8int16int32int64等。只需将dtype参数设置为相应的整数类型即可。

(4)数组清理
a = [1, 2, 3, 4, 5]

a[:] = []
# 输出:[]

a.clear()   # 推荐
# 输出:[]

(5)总结
  • 定义一维数组:
a = [0]*3                        #方式 1
a = [0,0,0]                      #方式 2 短的,推荐
a = [0 for _ in range(3)]        #方式 3 长的,推荐
# 输出:[0, 0, 0]

#-----------------------------------------
import array as arr
a = arr.array('b', [0, 0, 0])   #方式 4
# 输出:array('b', [0, 0, 0])

#-----------------------------------------
import numpy as np
a = np.array([])  # 定义一个空数组(空列表)
# 输出:[]

a = np.array([1, 2, 3, 4, 5])  # 定义一个数组
# 输出:[1 2 3 4 5]

​ 总的来说,前两种方式创建的列表的元素是相同的,第三种方式创建的列表和前两种是等价的,但更具有灵活性,可以用于生成更复杂的列表。如果你想要一组互不影响的元素,最好使用列表推导式的方式。如果你想要复制同一个元素,可以使用乘法操作符的方式。

  • 定义多维数组:
a_list = [[0]*3 for _ in range(5)]                        #方式 1
a_list = [[0, 0, 0] for _ in range(5)]                    #方式 2  短的,推荐
a_list = [[0 for _ in range(3)] for _ in range(5)]        #方式 3  长的,推荐
# 输出:[[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]

#--------------------------------------------------------------------------------
a_list = np.zeros((5, 3), dtype=int)  #创建一个5行3列的整数数组,所有元素都初始化为0                    #方式 4  次之
'''
输出:
[[0 0 0]
 [0 0 0]
 [0 0 0]
 [0 0 0]
 [0 0 0]]
'''

​ 综上所述,这两种方法都会创建一个包含5行3列的数组或列表,所有元素都被初始化为0,但第一种方法使用了NumPy库,第二种方法使用了Python的内置列表和列表推导式。NumPy数组在数值计算和高效的数组操作方面具有优势,因此在许多科学和数据相关任务中被广泛使用。然而,如果你不需要进行数值计算,而更喜欢简单的列表形式,第二种方法可能更合适。

3.Django框架定义数组

(1)ArrayField(依赖于 PostgreSQL 数据库)
  • 来自 Django 框架的 ArrayField,用于在 Django 模型中创建数据库字段的数组。
  • 只适用于 Django 项目,并用于数据库存储。
  • 在数据库中存储的数组大小是可变的,并且要指定数组的数据类型。
  • 适用于需要在 Django 模型中使用 size 参数,存储固定大小数组的情况。
from django.db import models
from django.contrib.postgres.fields import ArrayField

class MyModel(models.Model):
    my_array = ArrayField(models.FloatField(), size=4)

​ PgSQL(也称为PostgreSQL)是一种开源的关系型数据库管理系统(RDBMS),它以可靠性、稳定性和功能丰富而闻名。它由一个全球开发者社区维护,并且可以在多个平台上运行,包括Windows、Linux和Mac OS。

注意:

1)Models类文件引入ArrayField

from django.db import models
from django.contrib.postgres.fields import ArrayField

# 假设TBase_Stope在另一个文件中定义
from path.to.tbase_stope import TBase_Stope

class TExp_Stope(TBase_Stope):
    ZCYL_sx = ArrayField(models.FloatField(), size=4)

2)settings文件引入:

# settings.py

INSTALLED_APPS = [
    # ...
    'django_crontab',  # 添加这行
    # ...
]

3)安装相应包:

pip install django_crontab
pip install psycopg2   //因为 ArrayField 是依赖于 PostgreSQL 数据库的扩展功能。
(2)JSONField(支持PostgreSQL、MySQL、SQLite)

​ 在 Django 3.1 及更高版本中,MySQL支持JSON字段。您可以使用 Django 的 JSONField 来存储包含数组数据的 JSON 对象。在这种情况下,您可以将数组数据序列化为 JSON 字符串并存储在 JSONField 中。Django 中定义一个元素为4个的数组:

from django.db import models

class MyModel(models.Model):
    my_array = models.JSONField(default=list)

    def __str__(self):
        return str(self.my_array)

my_array_data = [1, 2, 3, 4]   # 创建一个包含4个元素的数组
my_model_instance = MyModel.objects.create(my_array=my_array_data) # 创建 MyModel 实例并保存数组数据
my_model_from_db = MyModel.objects.get(pk=my_model_instance.pk)  # 从数据库中获取保存的数据

print(my_model_from_db.my_array)  # 输出:[1, 2, 3, 4]
(3)TextField

​ 如果您的数组数据较为简单,您也可以使用 Django 的 TextField 来存储数组数据。在这种情况下,您可以将数组数据序列化为字符串,并将其存储在 TextField 中。

from django.db import models

class MyModel(models.Model):
    my_array = models.TextField()
(4)CharField + validators
from django.db import models
from django.core.validators import RegexValidator

class MyModel(models.Model):
    my_array = models.CharField(max_length=400, validators=[SizeValidator(4)])

我们使用SizeValidator来确保该字段只包含4个元素,下面是SizeValidator的一个简单实现:

class SizeValidator:
    def __init__(self, size):
        self.size = size

    def __call__(self, value):
        if value.count(',') != self.size - 1:
            raise ValidationError(f"数组只能包含 {self.size} 个元素")
(5)列表,不定长
from django.db import models

class MyModel(models.Model):
    my_list = models.TextField()

标签:python,列表,models,数组,import,array,my
From: https://www.cnblogs.com/DQ-MINE/p/17589632.html

相关文章

  • Python下载-2023最新版-编程软件 软件推荐
    《Python电脑版》为你提供便捷的编程服务操作,通过软件中的功能来进行快速的编程操作,Python电脑版带来更好的代码编写操作,并且可以体验到快速的代码运行服务,可以根据自己的需求来进行代码的编写操作。软件地址:看置顶贴python电脑版免费版亮点1、文档Python还带有完整的文档,既集成到......
  • Python编辑器(PyCharm) mac/win 电脑 中文汉化版 软件推荐
    MiniCondapython是一款python环境管理软件,在这款软件中主要帮助用户在电脑中对python环境进行管理和编辑;软件能自由切换自己需要的python环境;并且有着十分稳定的操作环境;软件支持在各种操作系统中使用,性能十分的稳定,能确保开放人员能正常进行编程;软件界面简洁,操作简单,无需任何复杂......
  • 数组降维-去重-排序
    letarr=[1,23,[121,1,53,[234,342,324,[234,432],234]]]快速实现letarr1=arr.flat(Infinity)//降维letarr2=Array.from(newSet(arr1))//去重,转为数组letarr3=arr2.sort((a,b)=>(a-b))//排序console.log(arr3)数组降维方法1:递归vararr1=[[0,1],[2,......
  • Python 装饰器
    当我们谈到Python中的装饰器时,我们实际上是在谈论一种特殊的语法构造,它允许我们在不修改原始函数代码的情况下,向函数添加额外的功能或行为。装饰器本质上是一个函数,它接受一个函数作为参数,并返回一个新的函数。装饰器的语法使用@符号,将装饰器函数放置在要装饰的函数的上方。当我们......
  • python学习难点及举例
    在Python的高级学习中,可能会遇到以下几个难点:迭代器和生成器:迭代器和生成器是Python中强大的概念,但在理解和使用它们时可能会有一些困难。迭代器是一种可以遍历数据集合的对象,而生成器是一种特殊的迭代器,可以按需生成值,而不是一次性生成所有值。#迭代器示例my_list=[1,2,3]m......
  • python爬取壁纸图片到本地
    源码#!/usr/bin/pythonimportrandomimportrequestsimportreimporttimefornuminrange(2,212): #url网页地址url="https://pic.netbian.com/new/index_"+str(num)+".html"#需要爬取图片的网页地址page=requests.get(url).text#得到网页源码#......
  • 基于Python实现RLE格式分割标注文件的格式转换
    下面我将详细讲解“基于Python实现RLE格式分割标注文件的格式转换”的完整攻略。一、RLE格式分割标注文件是什么?RLE格式是一种更加高效的图像语义分割数据表示格式,其数据以一串RLE编码的方式进行存储,而不是以像素点的形式存储,有效减少了数据的体积。RLE格式分割标注文件即是使......
  • 数组
    数组定义数组是相同类型数据的有序集合。其中每个数据称为元素,每个元素可以通过索引(下标)来访问。索引(index)数组的基本特点长度是确定的。数组一旦被创建,他的大小就是不可以改变的其元素的类型必须相同,不允许出现混合类型数组类型可以是任何数据类型,包括基本类型和引用类型......
  • Python TensorFlow循环神经网络RNN-LSTM神经网络预测股票市场价格时间序列和MSE评估准
    全文下载链接:http://tecdat.cn/?p=26562最近我们被客户要求撰写关于循环神经网络的研究报告,包括一些图形和统计输出。自2000年 1月以来的股票价格数据。我们使用的是Microsoft股票。该项目包括:将时间序列数据转换为分类问题。使用TensorFlow的LSTM模型由MSE衡......
  • 利用pyinstaller发布不依赖python解释器的可执行exe
    现在打包app.py,从Windows命令提示符(cmd)运行:pyinstaller.exe--onefile--windowedapp.py就这么简单。如果打包成功,最终的可执行文件app.exe和任何相关文件将放在dist目录中,如果该目录不存在,将创建该目录。  PyInstallerManualVersionPyInstaller5.1Homepagehttps://pyinstall......