首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >迭代两个嵌套的2D列表,其中list2有列表1的行号。

迭代两个嵌套的2D列表,其中list2有列表1的行号。
EN

Stack Overflow用户
提问于 2013-09-19 08:32:02
回答 4查看 2.8K关注 0票数 4

我是Python新手。所以我想用循环来完成这件事,而不需要用到一些花哨的东西,比如发电机。我有两个2D数组,一个整数数组,另一个字符串数组,如下所示:

  1. 整数2D列表: 在这里,dataset2d是表中的行数,dataset是列数。因此,下面的2D列表有6行4列 dataset2d =[ 6、4、0、0、0、1、1、0、2、0、0、2、2、0、1、1、1、1、0、0、1、1、1、0、2、1]
  2. 字符串2D列表: partition2d =[ 'A','1','2','4','B','3','5','C','6‘] partition[*][0]即第一列是一个标签。对于A组,1、2和4是我需要从dataset2d获取并应用公式的行号。这意味着我将读取1,进入dataset2d中的第1行,读取第一列值即dataset2d[1][0],然后从partition2d读取2,转到dataset 2d的第2行,并读取第一列即dataset2d[2][0]。同样,下一篇我将阅读dataset2d[4][0]。 然后,我将进行一些计算,获取一个值并将其存储在一个2D列表中,然后转到dataset2d中的下一列处理这些行。因此,在本例中,下一列读取的值将是dataset2d[1][1]dataset2d[2][1]dataset2d[4][1]。然后再做一些计算,得到该列的一个值,存储它。我将这样做,直到我到达dataset2d的最后一栏。 partition2d中的下一行是[B, 3, 5]。所以我先从dataset2d[3][0]dataset2d[5][0]开始。获取该列的值是一个公式。然后是真正的dataset2d [3][1]dataset2d[5][1]等,直到我到达最后一栏。我会这样做,直到读取partition2d中的所有行为止。

我试过的是:

代码语言:javascript
运行
复制
 for partitionRow in partition2d:
        for partitionCol in partitionRow:
                for colDataset in dataset2d:
                     print dataset2d[partitionCol][colDataset] 

我面临的问题是:

  1. partition2d是一个字符串数组,我需要跳过第一列,该列具有A、B、C等字符。
  2. 我只想在dataset2d列wise中迭代partition2d中给出的行号。因此,只有在我完成了该列之后,colDataset才会增加。

Update1:

我从文本文件中读取内容,二维列表中的数据可能会根据文件内容和大小而有所不同,但file1的结构(即dataset2d和file2 i.e partition2d )将是相同的。

Update2:因为Eric问到输出应该是什么样的。

代码语言:javascript
运行
复制
 0.842322 0.94322 0.34232 0.900009    (For A)
 0.642322 0.44322 0.24232 0.800009    (For B)

这只是一个例子,数字是由我随机输入的。因此,第一个数字0.842322是将公式应用于dataset2d列0的结果,即,对于考虑了行1、2、4行的A组,dataset2dparttionCol。

第二个数字,0.94322是将公式应用到dataset2d的第1列,即考虑行1、2、4的A组的dataset2dpartitionCol。

第三个数字,0.34232是将公式应用于dataset2d列2的结果,即考虑行1、2、4的A组的dataset2dpartitionCol,类似地,我们得到0.900009。

第二行中的第一个数字,即0.642322,是将公式应用于考虑了行3、5等的组B的dataset2d (即dataset2dparttionCol )列0的结果。

EN

回答 4

Stack Overflow用户

发布于 2013-09-19 09:55:31

下面是使用迭代器的可扩展解决方案:

代码语言:javascript
运行
复制
def partitions(data, p):
    for partition in p:
        label = partition[0]
        row_indices = partition[1:]
        rows = [dataset2D[row_idx] for row_idx in row_indices]
        columns = zip(*rows)

        yield label, columns

for label, columns in partitions(dataset2D, partitions2d):
    print "Processing", label
    for column in columns:
        print column
票数 2
EN

Stack Overflow用户

发布于 2013-09-19 08:44:23

partition2d是一个字符串数组,我需要跳过第一列,该列具有A、B、C等字符。

这叫做切片:

代码语言:javascript
运行
复制
 for partitionCol in partitionRow[1:]:

上面的片段将跳过第一列。

代码语言:javascript
运行
复制
 for colDataset in dataset2d:

已经做了你想做的事。这里没有像C++循环那样的结构。尽管你可以用一种非常平淡的方式做一些事情:

代码语言:javascript
运行
复制
 i=0
 for i in range(len(dataset2d)):
    print dataset2d[partitionCol][i]  
    i=+1

这是一种非常糟糕的方法。对于数组和矩阵,我建议您不要重新发明轮子(这也是Pythonic的东西),Numpy. 查看尤其是:numpy.loadtxt

票数 1
EN

Stack Overflow用户

发布于 2013-09-19 08:44:38

为了解决你的问题:

我面临的问题是:

  1. partition2d是一个字符串数组,我需要跳过第一列,该列具有A、B、C等字符。
  2. 我只想在dataset2d列wise中迭代partition2d中给出的行号。因此,只有在我完成了该列之后,colDataset才会增加。

问题1可以使用切片来解决--如果您想从第二个元素迭代partition2d,那么只能迭代到for partitionCol in partitionRow[1:]。这将分割从第二个元素开始到末尾的行。

所以,就像:

代码语言:javascript
运行
复制
 for partitionRow in partition2d:
        for partitionCol in partitionRow[1:]:
                for colDataset in dataset2d:
                    print dataset2d[partitionCol][colDataset]

问题2我不明白你想要什么:)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18889810

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档