第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

在線等,挺急的!一道看起來簡單的面試題,請大家探討一下

在線等,挺急的!一道看起來簡單的面試題,請大家探討一下

題目如下:下面的代碼有什么問題?data=[[1,2,3],[4,5,6],[7,8,9]]foriinrange(3):forjinrange(3):data[j][i]=data[j][i]*2坦白地說,我沒看出有什么問題,代碼意圖無非是按列優(yōu)先的順序,把二維數(shù)據(jù)的每個(gè)元素放大2倍,有什么要注意的隱患嗎?
查看完整描述

2 回答

?
寶慕林4294392

TA貢獻(xiàn)2021條經(jīng)驗(yàn) 獲得超8個(gè)贊

@Lo_yao_gwet所講,按行(data[i][j])和按列(data[j][i])迭代二維數(shù)組效率有差別,這個(gè)有道理,但原因我不敢茍同。我覺得尋址操作的次數(shù)是一樣的,python不會(huì)緩存data[i]的值使得下次使用data[i]就少了一次尋址操作,并且尋址操作的耗時(shí)可以忽略不記。
找到一篇將C二維數(shù)組的解釋,覺得靠譜:二維數(shù)組按行和按列遍歷效率和CPU高速緩存、內(nèi)存分頁調(diào)度機(jī)制有關(guān)。當(dāng)二維數(shù)組大到跨內(nèi)存頁時(shí),效率差別就比較顯著了。建議大家看看文章。
                            
查看完整回答
反對 回復(fù) 2019-08-17
?
烙印99

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超13個(gè)贊

把data[ji]=data[j][i]*2
改成data[i][j]=data[i][j]*2那么下面那行會(huì)更省時(shí)間。
python的list里面位置只是存放了指針以指向?qū)嶋H的數(shù)據(jù),或者子list。
以下是偽代碼,假設(shè)沒有其他操作
A=a1,a2,a3
B=b1,b2,b3
C=c1,c2,c3
List=A,B,C
以你提供的代碼為例,需要如此操作
A,a1,B,b1,C,c1,
A,a2,B,b2,C,c2,
A,a3,B,be,C,c3
一共18次訪問。
如果以改善版本為例
A,a1,a2,a3,
B,b1,b2,b3,
C,c1,c2,c3
一共12次訪問。
下面是我的測試代碼
importtime
a=list(range(10000))
b=list(range(10000))
c=list(range(10000))
data=[a,b,c]
#betterperformance
start=time.time()
foriinrange(3):
forjinrange(10000):
data[i][j]=data[i][j]*2
end=time.time()
print(end-start)
a=list(range(10000))
b=list(range(10000))
c=list(range(10000))
data=[a,b,c]
#badperformance
start2=time.time()
foriinrange(10000):
forjinrange(3):
data[j][i]=data[j][i]*2
end2=time.time()
print(end2-start2)
0.01891350746154785
0.02604365348815918[Programfinished]
`
                            
查看完整回答
反對 回復(fù) 2019-08-17
  • 2 回答
  • 0 關(guān)注
  • 308 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號