亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Python列表附加行為

Python列表附加行為

飲歌長嘯 2019-12-05 15:58:29
真的不知道如何提出問題...假設我執行以下操作:    >>> l = [[]]*2    >>> l    [[], []]    >>> l[0].append(1)    >>> l    [[1], [1]]為什么將1附加到兩個列表中?
查看完整描述

3 回答

?
慕的地8271018

TA貢獻1796條經驗 獲得超4個贊

[[]]*2是對同一列表的兩個引用的列表。您要附加它,然后看到它兩次。


查看完整回答
反對 回復 2019-12-05
?
慕虎7371278

TA貢獻1802條經驗 獲得超4個贊

因為實際上只有一個列表??紤]一下:


>>> l = [[]]

>>> l2 = l*2

>>> l2[0] is l[0]

True

>>> l2[1] is l[0]

True

*2對列表執行的操作不會復制該列表,但會返回一個長度2相同的列表,并用相同的引用填充。


您可能想要的是:


>>> l = [[] for _ in xrange(2)]

正如@Asterisk在評論中提到的那樣,所有常見集合都暴露出相同的行為。因此,根據經驗,最好只對具有值語義的不可變類型使用乘法。


查看完整回答
反對 回復 2019-12-05
?
胡子哥哥

TA貢獻1825條經驗 獲得超6個贊

這是我初始化列表列表的方式。行的變化最慢。


nrows = 3; ncols = 5


l_of_ls = [[0]*ncols for i in range(nrows )]


for rix, r in enumerate(l_of_ls):

    for cix, c in enumerate(r):

        print rix, cix, 'val = ',c

結果


0 0 val =  0

0 1 val =  0

0 2 val =  0

0 3 val =  0

0 4 val =  0

1 0 val =  0

1 1 val =  0

1 2 val =  0

1 3 val =  0

1 4 val =  0

2 0 val =  0

2 1 val =  0

2 2 val =  0

2 3 val =  0

2 4 val =  0 

還值得注意的是用于索引目的


for rix in range(nrows):

    for cix in range(ncols):

        print l_of_ls[rix][cix],

    print

結果


0 0 0 0 0

0 0 0 0 0

0 0 0 0 0  


查看完整回答
反對 回復 2019-12-05
  • 3 回答
  • 0 關注
  • 500 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號