[英]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.