首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将重复的二维数组减少为一个

如何将重复的二维数组减少为一个
EN

Stack Overflow用户
提问于 2021-01-31 18:27:47
回答 1查看 19关注 0票数 0

我有以下2d数组,我希望根据该数组的第一个值将重复项减少为一个。

代码语言:javascript
复制
['AA' 'Put' 1]
['AAL' 'Call' 20]
['AAL' 'Put' 8]
['AAP' 'Call' 1]
['AAPL' 'Call' 1]
['AAPL' 'Put' 2]
['ABBV' 'Call' 1]
['ABBV' 'Put' 1]
['ABNB' 'Call' 6]
['ABNB' 'Put' 2]
['ABT' 'Call' 1]
['ACB' 'Call' 8]
['ADBE' 'Call' 1]
['ADP' 'Call' 1]
['AEO' 'Put' 1]
['AEZS' 'Call' 1]
['AG' 'Call' 1]
['AGNC' 'Put' 1]
['AHT' 'Call' 1]
The output I am looking is like this:
      call put
['AA' '0' '1']
['AAL' '20' 8]
['AAP' '1' 0]
['AAPL' '1' 2]
['ABBV' '1' 1]
['ABNB' '6' 2]
['ABT' '1' '0']
['ACB' '8' '0']
['ADBE' '1' '0']
['ADP' '1''0' ]
['AEO' '0' '1']
['AEZS' '1' '0']
['AG' '1' '0']
['AGNC' '0' 1]
['AHT' '1' '0']

here is my attempt
    arr2 = [[],[]] #the data
    twoDarry = []

    for items in range(len(arr2)):
        print(arr2[items])
        if(items+1<len(arr2)):
            if(arr2[items][0]==arr2[items+1][0]): #check if duplicate
                tmparr = []
                tmparr = arr2[items]
                tmparr.extend(arr2[items+1])
                twoDarry.append(tmparr)
            else:  # not duplicate
                twoDarry.append(arr2[items])

如果调用或put是任务(意味着没有重复),则将零作为值。将其转换为panada不是一个好的选择,因为在某些时候我不得不处理一些兼容性问题。我遗漏了什么?

EN

Stack Overflow用户

发布于 2021-02-01 05:15:03

首先,我假设您的数据数组被正确地格式化为列表列表,如下所示:

代码语言:javascript
复制
indat = [['AA', 'Put', 1], ['AAL', 'Call', 20], ['AAL', 'Put', 8], ['AAP', 'Call', 1], ['AAPL', 'Call', 1],
        ['AAPL,', 'Put', 2], ['ABBV', 'Call', 1], ['ABBV', 'Put', 1], ['ABNB', 'Call', 6],
        ['ABNB', 'Put', 2], ['ABT', 'Call', 1], ['ACB', 'Call', 8], ['ADBE', 'Call', 1],
        ['ADP', 'Call', 1], ['AEO', 'Put', 1], ['AEZS', 'Call', 1], ['AG', 'Call', 1], 
        ['AGNC', 'Put', 1], ['AHT' ,'Call', 1]]

根据您在问题中所描述的内容,我进一步假设您希望使用一个函数,该函数将数组作为变量,并以列表列表的形式生成所需的输出。假设这些假设是正确的,下面的函数将起作用。

代码语言:javascript
复制
def reduceArray(arr: list) -> list:
    indict= dict()
    for itm in arr:
        cv = indict.pop(itm[0], [0, 0])
        if itm[1] == 'Put':
            if cv[1] == 0:
                cv[1] = itm[2]
        else:
            if cv[0] == 0:
                cv[0] = itm[2]
        indict[itm[0]] = cv
    rslt = []
    for ky, val in indict.items():
        rslt.append([ky, val[0], val[1]])
    return rslt  

正在执行:

代码语言:javascript
复制
reduceArray(indat)  

产生:

代码语言:javascript
复制
[['AA', 0, 1],
 ['AAL', 20, 8],
 ['AAP', 1, 0],
 ['AAPL', 1, 0],
 ['AAPL,', 0, 2],
 ['ABBV', 1, 1],
 ['ABNB', 6, 2],
 ['ABT', 1, 0],
 ['ACB', 8, 0],
 ['ADBE', 1, 0],
 ['ADP', 1, 0],
 ['AEO', 0, 1],
 ['AEZS', 1, 0],
 ['AG', 1, 0],
 ['AGNC', 0, 1],
 ['AHT', 1, 0]]
票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65978039

复制
相关文章

相似问题

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