python中如何定义一个数组_如何在Python中声明一个数组?

要添加到Lennart的答案,可以像这样创建一个数组:

from array import array

float_array = array("f",values)

其中值可以采用元组,列表或np.array的形式,但不是数组:

values = [1,2,3]

values = (1,2,3)

values = np.array([1,2,3],'f')

# 'i' will work here too, but if array is 'i' then values have to be int

wrong_values = array('f',[1,2,3])

# TypeError: 'array.array' object is not callable

输出仍然是相同的:

print(float_array)

print(float_array[1])

print(isinstance(float_array[1],float))

# array('f', [1.0, 2.0, 3.0])

# 2.0

# True

列表的大多数方法也使用数组,常见的是pop(),extend()和append() .

从答案和评论来看,似乎阵列数据结构并不那么受欢迎 . 我喜欢它,就像人们可能更喜欢列表中的元组一样 .

数组结构比list或np.array具有更严格的规则,这可以减少错误并使调试更容易,尤其是在处理数值数据时 .

尝试将float插入/附加到int数组将引发TypeError:

values = [1,2,3]

int_array = array("i",values)

int_array.append(float(1))

# or int_array.extend([float(1)])

# TypeError: integer argument expected, got float

因此,保持数组形式的整数值(例如索引列表)可能会阻止“TypeError:list indices必须是整数,而不是float”,因为数组可以迭代,类似于np.array和lists:

int_array = array('i',[1,2,3])

data = [11,22,33,44,55]

sample = []

for i in int_array:

sample.append(data[i])

令人讨厌的是,将一个int附加到float数组将导致int变为float,而不会引发异常 .

np.array也为其条目保留相同的数据类型,但它不会发出错误,而是更改其数据类型以适应新条目(通常为double或str):

import numpy as np

numpy_int_array = np.array([1,2,3],'i')

for i in numpy_int_array:

print(type(i))

#

numpy_int_array_2 = np.append(numpy_int_array,int(1))

# still

numpy_float_array = np.append(numpy_int_array,float(1))

# for all values

numpy_str_array = np.append(numpy_int_array,"1")

# for all values

data = [11,22,33,44,55]

sample = []

for i in numpy_int_array_2:

sample.append(data[i])

# no problem here, but TypeError for the other two

在任务期间也是如此 . 如果指定了数据类型,则np.array将尽可能将条目转换为该数据类型:

int_numpy_array = np.array([1,2,float(3)],'i')

# 3 becomes an int

int_numpy_array_2 = np.array([1,2,3.9],'i')

# 3.9 gets truncated to 3 (same as int(3.9))

invalid_array = np.array([1,2,"string"],'i')

# ValueError: invalid literal for int() with base 10: 'string'

# Same error as int('string')

str_numpy_array = np.array([1,2,3],'str')

print(str_numpy_array)

print([type(i) for i in str_numpy_array])

# ['1' '2' '3']

#

或者,在本质:

data = [1.2,3.4,5.6]

list_1 = np.array(data,'i').tolist()

list_2 = [int(i) for i in data]

print(list_1 == list_2)

# True

而数组将简单地给出:

invalid_array = array([1,2,3.9],'i')

# TypeError: integer argument expected, got float

因此,将np.array用于特定于类型的命令并不是一个好主意 . 数组结构在这里很有用 . list保留值的数据类型 .

对于我发现相当讨厌的东西:数据类型被指定为array()中的第一个参数,但(通常)是np.array()中的第二个参数 . :|

玩得开心!

注意:数组的类型和相当严格的性质更倾向于C而不是Python,并且根据设计,Python在其函数中没有许多特定于类型的约束 . 它的不受欢迎也会在协同工作中产生积极的反馈,而替换它主要涉及额外的[int(x)for x in file] . 因此,忽略阵列的存在是完全可行和合理的 . 它不应该以任何方式阻碍我们大多数人 . :d

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值