簡體   English   中英

如何遍歷二維數組並添加元素

[英]how to iterate through 2d array and add elements

我有以下二維數組:

['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]

如果缺少看漲期權或看跌期權,我想添加缺少的值為零的值。 這是我的嘗試:

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

訂單必須先看漲再看跌。 我在這里想念什么?

您的主要問題是np.insert 默認情況下,它首先展平數組,然后插入新數據,因此在第一次插入后,我們的數組變為一維,第二個索引開始應用於第一個索引返回的字符串元素。 這就是錯誤的原因。 如果您使用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)

即使之后結果與您發布的示例不同,原因在於您使用的條件。 我不知道哪個是錯誤的:示例或條件,但相信您將能夠自己修復它。

這是一個解決方案:

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超出范圍時)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM