【问题标题】:How to create array from certain elements in another array?如何从另一个数组中的某些元素创建数组?
【发布时间】:2018-04-28 15:43:40
【问题描述】:

我有一个 7 列 52 行的数组。我想创建一个仅包含第 4 列的数组,但仅基于第 7 列的 1 或 0 值。有人可以帮忙吗?

for row in dataArray:
    if (row[6] == 1):
        sumNSal += int(row[4])
    if (row[6] == 0):
        sumNSalR += int(row[4])
print sumNSal, sumNSalR

我的愿望是在第 4 列中实际添加一些数字,但只在最后一列中添加对应于 0 的数字。我的 dataArray 是这样的:最后一列由 0 和 1 组成。希望这能消除混乱。

['244', '128', '385', '23521', '5230', '5334', '0']
['59', '155', '203', '9160', '2459', '493', '1']
['120', '281', '392', '21900', '6304', '6115', '0']
['120', '291', '419', '22354', '6590', '6346', '0']
['120', '238', '363', '17421', '5362', '6225', '0']
['65', '180', '234', '10531', '3622', '449', '1']
['120', '306', '372', '22147', '4406', '4998', '1']
['90', '214', '305', '14025', '4173', '966', '1']
['96', '155', '169', '8812', '1955', '1260', '0']
['120', '133', '188', '11729', '3224', '6442', '1']
['62', '148', '192', '8896', '2409', '1236', '0']
['120', '274', '426', '20987', '2066', '3360', '1']
['116', '154', '321', '17655', '5946', '4231', '0']
['59', '120', '164', '7085', '1925', '1280', '1']
['80', '261', '284', '13089', '4166', '1123', '1']
['120', '338', '375', '21453', '5257', '5206', '1']
['80', '77', '133', '7790', '1988', '4443', '1']
['100', '204', '318', '18309', '4156', '4585', '1']
['60', '97', '213', '8872', '1914', '1675', '1']
['110', '178', '280', '17881', '5173', '5686', '1']
['120', '232', '336', '17004', '4630', '907', '0']
['135', '316', '442', '23829', '7489', '3351', '0']
['59', '163', '191', '9424', '2051', '1756', '1']
['60', '96', '202', '12474', '3803', '2123', '0']
['25', '74', '83', '4078', '2008', '4531', '1']
['221', '514', '776', '36029', '1288', '2543', '1']
['64', '91', '214', '8782', '4729', '4446', '1']
['62', '146', '204', '8951', '2367', '1064', '0']
['108', '255', '366', '17446', '5933', '2987', '1']
['62', '144', '220', '6164', '2782', '411', '1']
['90', '151', '286', '2853', '4651', '4197', '0']
['146', '100', '375', '21334', '6857', '1198', '0']
['62', '174', '189', '8082', '2143', '1209', '1']
['30', '54', '88', '3948', '3025', '137', '1']
['79', '213', '278', '11649', '2905', '1279', '0']
['44', '127', '158', '7850', '1498', '1273', '1']
['120', '208', '423', '29035', '6236', '3524', '0']
['100', '255', '300', '17532', '3547', '2561', '1']
['49', '110', '177', '8197', '2810', '3874', '1']
['123', '208', '336', '22555', '6059', '6402', '1']
['82', '114', '136', '8459', '1995', '1911', '1']
['58', '166', '205', '10412', '2245', '1122', '1']
['110', '228', '323', '16661', '4029', '3893', '1']
['62', '183', '222', '12406', '2784', '2212', '1']
['86', '62', '200', '11312', '3720', '2959', '1']
['102', '326', '355', '14499', '3866', '3006', '1']
['135', '157', '471', '24274', '7485', '1344', '0']
['78', '154', '203', '9327', '3672', '1242', '1']
['83', '224', '390', '12362', '3995', '1484', '1']
['60', '48', '213', '10644', '2820', '1154', '0']
['54', '119', '144', '7556', '2088', '245', '1']
['120', '217', '327', '20182', '4432', '6274', '0']

【问题讨论】:

  • "ut 仅基于第 7 列中的 1 或 0 值。"呜?
  • 您需要详细说明您的问题。分享您当前的列表和所需的输出,并分享您尝试过的内容。
  • cpython 数组、numpy 数组、原版列表?请考虑添加代码示例,或修改您在此问题中发布的示例。就目前而言,它的格式和范围使我们很难为您提供帮助;这是一个great resource,可以帮助您开始。祝你的代码好运!
  • @Philip 在你的代码中,if(row[6] == 1),不应该是if(row[6] == '1')吗?因为列表包含字符串值。
  • 从您的代码看来,您试图保留 两个 不同的总和,sumNSalsumNSalR,而不是您所说的一个。此外,row[6] 是第七列,row[4] 不是第四列。

标签: python arrays if-statement rows python-2.x


【解决方案1】:

如果你的二维列表是A,那么

# 0-based indexing
# assuming you want to take 4th column only when 7th column is `0`.
# assuming 7th column contains either '1' or '0'
X = [int(row[3]) for row in A if row[6] == '0'] 

X 将是一个列表,对于二维列表中的每一行,如果第 7 列中的对应值为 '0',则仅包含第 4 列值。

这种语法称为列表理解,您可以阅读更多关于它的信息here

【讨论】:

  • 我真的很想让它工作,但它只返回一个 [ [ ] ]
【解决方案2】:

听起来你想要布尔索引。我假设我们正在谈论 numpy。请注意,如果您希望最后一列中的值对应于零,则只需使用 ~ 否定布尔逻辑即可。

import numpy as np

# data array
A = np.random.random([52,7])

# Make a boolean from your seventh column
tf = np.array(A[:,6], dtype=bool)

# select values from the fourth column
a = A[~tf, 3]

# sum them
a.sum()

# This can be combined into one line if desired. Something like:
thesum = A[A[:,6] == 0, 3].sum()

【讨论】:

  • 问题中没有提到numpy。套用一句著名的格言:当你知道如何使用的唯一工具是锤子时,所有的问题都开始看起来像钉子......
  • 我对最初提出的问题提供了明确的答案,同时做出了一些合理的假设,因为问题不是很清楚。有时钉子就是钉子。
  • 对于这样一个简单的问题,IMO 完全矫枉过正。也许您应该先在评论中询问 OP,然后再做出这样的假设。
猜你喜欢
  • 2019-03-20
  • 2020-10-25
  • 2020-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-09
相关资源
最近更新 更多