如何迭代二维数组并添加元素

2024-06-17 13:39:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下2d阵列:

['AA' 'Call' 1]
['AAL' 'Call' 1]
['AAL' 'Put' 1]
['AAP' 'call' 1]
['AAPL' 'Call' 13]
['AAPL' 'Put' 11]
['AAWW' 'Call' 1]
['ABBV' 'put' 1]
['ABNB' 'Call' 2]
['ABNB' 'Put' 2]
['ABT' 'Call' 2]
['ACB' 'Call' 5]
['ACB' 'Put' 15]

这是我想要的样子

['AA' 'Call' 1]
['AA' 'put' 0]
['AAL' 'Call' 1]
['AAL' 'Put' 1]
['AAP' 'call' 1]
['AAP' 'put' 0]
['AAPL' 'Call' 13]
['AAPL' 'Put' 11]
['AAWW' 'Call' 1]
['AAWW' 'Put' 0]
['ABBV' 'Call' 0]
['ABBV' 'put' 1]
['ABNB' 'Call' 2]
['ABNB' 'Put' 2]
['ABT' 'Call' 2]
['ABT' 'put' 0]
['ACB' 'Call' 5]
['ACB' 'Put' 15]

如果调用或put缺失,我想将缺失的值加上零。 以下是我的尝试:

i =  0
while i < len(arr):
    if(i+1<len(arr) and i>0):
        if((arr[i][0]!=arr[i+1][0]) and (arr[i-1][0]!=arr[i][0])):
            if(arr[i][1]=='Call'):
                ticker = arr[i][0]
                val = [ticker,'Put','0']
                arr = np.insert(arr, i+1,val)
                i += 1
            elif(arr[i][1]=='Put'):
                ticker = arr[i][0]
                val = [ticker,'Call','0']
                arr = np.insert(arr, i-1,val)
                i +=1
    i += 1

订单必须先进行催缴,然后进行看跌期权。我错过了什么


Tags: putvalcallaatickerarraaplaap
2条回答

这里有一个解决方案:

arr=[
['AA','Call', 1],
['AAL', 'Call', 1],
['AAL', 'Put', 1],
['AAP', 'Call', 1],
['AAPL', 'Call', 13],
['AAPL', 'Put', 11],
['AAWW', 'Call', 1],
['ABBV', 'Put', 1],
['ABNB', 'Call', 2],
['ABNB', 'Put', 2],
['ABT', 'Call', 2],
['ACB', 'Call', 5],
['ACB', 'Put', 15]]

i=0
while i < len(arr):
    if i+1<len(arr):
        if arr[i][0]!=arr[i+1][0]:
            if arr[i][1]=='Call':
                arr.insert(i+1,[arr[i][0],'Put',0])
            else:
                arr.insert(i,[arr[i][0],'Call',0])            
        i += 1            
    else:
        if arr[i][1]=='Call':
            arr.append([arr[i][0],'Put',0])
        else:
            arr.insert(i,[arr[i][0],'Call',0])
        i += 1
        
    i += 1

请注意,您需要考虑列表中的最后一项(即i+1超出范围时)

您的主要问题是np.insert。默认情况下,它首先展平数组,然后插入新数据,因此在第一次插入后,数组变为1D,第二个索引开始应用于第一个索引返回的字符串元素。这就是错误的原因。如果您使用arr[i, 0]而不是arr[i][0],那么您应该更早地理解它。 要避免展平,需要指定一个轴,沿该轴插入新值。在您的情况下,它是轴0,因此您需要

arr = np.insert(arr, i+1,val, axis=0)
...
arr = np.insert(arr, i-1,val, axis=0)

即使在这之后,结果也与您发布的示例不同,原因在于您使用的条件。我不知道哪一个是错的:例子还是条件,但相信你自己能解决它

相关问题 更多 >