【问题标题】:Creating variable number of variables in python在python中创建可变数量的变量
【发布时间】:2017-12-14 09:12:24
【问题描述】:

我正在尝试在 python 中创建可变数量的变量(数组)。

我有一个实验数据库,我正在从中提取数据。我无法控制数据库或数据的写入方式。我正在以表格的形式提取数据 - 第一列(或从 python 的角度来看的第零列)具有位置 ID,后续列具有多次迭代的读数。位置 ID(在第 0 列中)跨越数百万行,因此迭代的读数被捕获在后续列中。所以我阅读了数据库并创建了这个巨大的表。

在下一步中,我循环遍历索引 1 到 n 的列(第 0 列有位置),我试图得到这个 - 如果 2 个读数的差异大于 0.001,则将位置 id 写入数组。

 if ( (A[i][j+1] - A[i][j]) > 0.001): #1<=j<=n, 0<=i<=max rows in the table
   then write A[i][0] i.e. location id to an array, arr1[m][n] = A[i][0]

问题:它正在创建动态数量的变量,例如arr1。我将每个循环迭代的结果存储在一个数组中,并且 j 的列数仅在运行时才知道。那么如何创建可变数量的变量,例如arr1?其次,像arr1 这样的每个变量都可以有不同的大小。

我查看了类似的问题,但多维数组不起作用,因为每个 arr1 可以有不同的大小。此外,性能很重要,所以我猜 numpy 数组会更好。我猜对于如此庞大的数据,字典的性能会很慢。

【问题讨论】:

标签: python


【解决方案1】:

我对您对问题的解释不太了解,但从您写的内容看来,正常的list 可以完成这项工作:

arr1 = []

if (your condition here):
    arr1.append(A[i][0])

内存管理是动态的,即它会根据需要分配新内存,然后如果您需要一个 numpy 数组,只需创建 numpy_array = np.asarray(arr1)

python 列表的(非常)小入门:

python 中的列表是一个可变容器,用于存储对任何类型对象的引用。与 C++ 不同,在 python 列表中,您的项目可以是任何东西,并且您不必在定义列表时指定列表大小。 在上面的示例中,arr1 最初定义为空,每次调用 arr1.append() 时,都会在列表末尾推送对 A[i][0] 的新引用。

例如:

a = []
a.append(1)
a.append('a string')
b = {'dict_key':'my value'}
a.append(b)
print(a)

显示:

[1, 'a string', {'dict_key': 'my value'}]

如您所见,列表并不真正关心您附加的内容,它会存储对该项目的引用并将其大小增加 1。

我强烈建议您查看daa structures documentation,以进一步了解列表的工作原理及其一些注意事项。

【讨论】:

  • 我想创建多个arr1,这就是问题所在。在程序运行之前不知道有多少。每个arr1 可以有不同的大小。
  • 您不需要“制作”任何变量。你只是将它存储在一个列表中(它的元素可以有任何东西,不像在 C++ 中的例子)
  • 我更愿意事先创建变量arr1, arr2... 以提高性能。并动态分配行。有什么办法吗?
  • 不,除非您事先知道号码(您说的情况并非如此)。在后台分配可能我稍微优化,但你无法控制,所以你剩下的就是追加到一个缓慢增长的列表
  • 我的意思是运行时。我可以在运行时找到要创建的 arr1 变量数为 10。那么我可以创建 arr1, arr2,..arr10 吗?
【解决方案2】:

我查看了类似的问题,但多维数组不起作用,因为每个 arr1 可以有不同的大小。

-- 但是数组的列表 可以工作,因为列表中的项目可以是任何东西,包括不同大小的数组。

【讨论】:

  • 你能解释一下数组列表吗?
  • 列表是非常基本的 Python 概念,所以我会给你推荐一个教程。
猜你喜欢
  • 1970-01-01
  • 2013-08-26
  • 2022-11-23
相关资源
最近更新 更多