[問題] list增加維度(已解決)

看板Python作者 (前端攻城師)時間6年前 (2018/06/04 20:54), 5年前編輯推噓3(3076)
留言79則, 5人參與, 6年前最新討論串1/1
不才小萌新想要請教各位前輩大大 list 如何增加維度<(_ _)> 我現在有個二維串列和一個一維串列 示例: demo [0]['A','B','C'] [1]['D','E','E'] addA ['A1','A2','A3'] 我嘗試demo[0][0].append(addA) 我希望的效果是demo[0][0][0]會印出A1 但是失敗了 錯誤訊息是: TypeError: 'str' object does not support item assignment 我判斷demo[0][0]抓到的是字串A而不是該陣列,所以不能append 那麼請問各位大大我如何在A後面增加一維變成類似樹狀結構的構造? -- 壁河山攻守 爭成敗悟道 許銀川 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.163.158.239 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1528116871.A.63F.html

06/04 20:56, 6年前 , 1F
加進去之後原本的A怎麼辦?
06/04 20:56, 1F
如果可以,我希望demo[0][0]跑出A,demo[0][0][0]跑出A的資訊A1 >///<

06/04 20:59, 6年前 , 2F
1. 先了解append()的作用,新的元素是放在最後面
06/04 20:59, 2F
好的

06/04 21:00, 6年前 , 3F
2. demo[0][0]就是'a', 但你是要把addA加到demo[0]才對
06/04 21:00, 3F

06/04 21:02, 6年前 , 4F
3. 去查一下list.insert()怎麼用吧
06/04 21:02, 4F
我粗略嘗試之後效果似乎不太對

06/04 21:04, 6年前 , 5F
補充: 根據你回文要的功能,建議你重新了解list結構ˇ
06/04 21:04, 5F
我原本以為list就是練結串列,所以應該可以直接實現我要的結構, 不過仔細研究之後好像不行 我可能接下來會嘗試用demo[0][0]的A當作dict的索引,再連到addA拿資訊吧, 謝謝您的回覆<(_ _)>

06/04 21:22, 6年前 , 6F
如果是想把A當作選到整個['A1', 'A2', 'A3']時的回傳值
06/04 21:22, 6F

06/04 21:24, 6年前 , 7F
,你可以寫一個新的class配上dict和__getitem__去處理
06/04 21:24, 7F

06/04 21:24, 6年前 , 8F
(繼承list)
06/04 21:24, 8F

06/04 21:27, 6年前 , 9F
譬如說,在__getitem__()裡判斷目前取得的元素是否為
06/04 21:27, 9F

06/04 21:28, 6年前 , 10F
dict,是的話回傳該dict的key. 但是這邊要注意到,dict是
06/04 21:28, 10F

06/04 21:29, 6年前 , 11F
可擴充的,所以若該dict有複數個key,那這種方法又會失效
06/04 21:29, 11F

06/04 21:30, 6年前 , 12F
有需要討論的話,可以站內信給我,我們用discord講比較快
06/04 21:30, 12F
我窩窩對python的了解不深,不太清楚__getitem__這樣高級用法,感覺您的方法好複雜 小萌新怕怕(抖抖 我現在正在研究python有沒有可能自己寫link list, 有了這個,我想要的資料結構應該都可以自己實作 discord就算了吧,您的方法對我太高深,而且我沒用discord 謝謝您 <3 太喜歡鏈結串列了,忽然覺得沒指標的語言不是很好處理資料結構Q

06/04 21:58, 6年前 , 13F
linked list用index access?
06/04 21:58, 13F
我研究看看,不過我可能會考慮看看有沒有簡單的方法解我真正的問題,快昏了

06/04 22:37, 6年前 , 14F

06/04 22:37, 6年前 , 15F
這樣的效果是你要的嗎?
06/04 22:37, 15F

06/04 22:39, 6年前 , 16F
簡單來說,建立一個繼承list的class. 裡面多一個屬性
06/04 22:39, 16F

06/04 22:40, 6年前 , 17F
`name`作為該list的名稱. 然後你要的效果就從__repr__
06/04 22:40, 17F

06/04 22:41, 6年前 , 18F
去處理.
06/04 22:41, 18F

06/04 22:49, 6年前 , 19F
補充說明一下: 我之所以會說用discord討論是因為那個
06/04 22:49, 19F

06/04 22:49, 6年前 , 20F
註冊一下就可以用了,而且又不會透露你實際上是誰
06/04 22:49, 20F
http://codepad.org/Kycszfma 上面是我原始的code,我要產生要求效果的地方是第32行 我仔細研究之後,您給的這份code應該可以完成我的要求 非常感謝您!m(_ _)m

06/04 22:52, 6年前 , 21F
https://codeshare.io 好像也是可以,只是它好像沒有單
06/04 22:52, 21F

06/04 22:52, 6年前 , 22F
純的voice chat
06/04 22:52, 22F
謝謝您提供的溝通知識 <3 其實我的問題再來一個dict應該可以解,不過我再邊處理其他事>"<

06/04 22:59, 6年前 , 23F
d=[['a','b'],['c','d']]
06/04 22:59, 23F

06/04 22:59, 6年前 , 24F
d[0][0] = ['A1', 'A2', d[0][0]]
06/04 22:59, 24F

06/04 22:59, 6年前 , 25F
你是想做這種事嗎?
06/04 22:59, 25F
不是,我是希望demo[0][0]跑出A,demo[0][0][0]跑出A的資訊A1 >"<

06/04 23:00, 6年前 , 26F
回覆關於你說的要產生第3個維度: 我的範例4中, nl原本
06/04 23:00, 26F

06/04 23:00, 6年前 , 27F
是1維,照你想要的效果來看,就是將其中一個元素重新指派
06/04 23:00, 27F

06/04 23:01, 6年前 , 28F
為一個NamedList(也就是說該元素的維度增加).
06/04 23:01, 28F
其實我剛剛又研究了一下,我發現範例3應該可以實現我要的, 只是我前面要自己加一維的樣子,感謝您<(_ _)>

06/04 23:08, 6年前 , 29F
ok. 只是看完你的code,感覺你寫一個class去整理會更清
06/04 23:08, 29F
還有 20 則推文
還有 12 段內文
06/05 00:10, 6年前 , 50F
1. __init__()就是物件的建構式,我在裡面加上word這個
06/05 00:10, 50F

06/05 00:10, 6年前 , 51F
欄位,方便之後底下的__repr__去處理你要的功能.
06/05 00:10, 51F
init會那麼複雜是因為繼承了python原有的list物件是嘛?

06/05 00:12, 6年前 , 52F
2. __repr__()是回傳物件的表示,像是print(object)時,
06/05 00:12, 52F

06/05 00:12, 6年前 , 53F
就會去呼叫物件的__repr__()
06/05 00:12, 53F
細節譬如str(self[:])不懂在做啥,不過大約知道怎用了吧...

06/05 00:25, 6年前 , 54F
__init__()裡面,第一行是取出kwargs中為word的值
06/05 00:25, 54F

06/05 00:26, 6年前 , 55F
kwargs是一個dict,所以如果kwargs裡沒有key為word的值
06/05 00:26, 55F

06/05 00:27, 6年前 , 56F
的話,就會回傳None.
06/05 00:27, 56F

06/05 00:28, 6年前 , 57F
第二行super(...).__init__(...)則是呼叫父類別(list)
06/05 00:28, 57F

06/05 00:28, 6年前 , 58F
的建構式__init__().
06/05 00:28, 58F

06/05 00:30, 6年前 , 59F
self[:] ← 因為MyData是list,所以self[:]就是取出list
06/05 00:30, 59F

06/05 00:30, 6年前 , 60F
內的所有元素.
06/05 00:30, 60F

06/05 00:31, 6年前 , 61F
後面的if else就相當於C的三元運算子
06/05 00:31, 61F
大約明白一些了,請問那個滿滿的*號是甚麼意思? __init__函式裡的前3個引數有特殊意義,還是自定義的? 我開始再思考以後如何複製這個用法了了

06/05 00:34, 6年前 , 62F
再稍微修改後的結果: http://codepad.org/QcD1aN0Z
06/05 00:34, 62F

06/05 00:37, 6年前 , 63F
關於*args和**kwargs,看一下這個連結的說明
06/05 00:37, 63F

06/05 00:37, 6年前 , 64F

06/05 00:38, 6年前 , 65F
args和kwargs只是變數名稱,不一定非要用這幾個字
06/05 00:38, 65F
我覺得一步步看著自己親手打的程式愈來愈高級, 有種恍惚感,很高興有這樣學習的機會! 真心感謝您,已不知如何形容我的感謝了m(_ _)m

06/05 00:39, 6年前 , 66F
然後在class裡面self這個關鍵字是指`物件自己`
06/05 00:39, 66F
self這個用法我剛好知道XDD 好像哪裡有看過一樣的用法

06/05 00:42, 6年前 , 67F
不過正確說,`self`是大家常用的詞,不算是keyword
06/05 00:42, 67F
竟然!我一直以為是keyword

06/05 00:43, 6年前 , 68F
ok的! 有問題就再更新內容吧
06/05 00:43, 68F
好的謝謝您,明天要考試,再看一下應該就睡了,您也早點休息吧,晚安

06/05 00:44, 6年前 , 69F
那算是coding style (詳見PEP8),就跟class method的第
06/05 00:44, 69F

06/05 00:45, 6年前 , 70F
一個參數常用cls或clz一樣
06/05 00:45, 70F

06/05 00:45, 6年前 , 71F
ok 加油囉y
06/05 00:45, 71F
謝謝 <3

06/05 01:11, 6年前 , 72F
突然想到,44行 mydata = getData(link, mydata.word)
06/05 01:11, 72F

06/05 01:12, 6年前 , 73F
要改成1. mydata.append(getData(link, mydata.word))
06/05 01:12, 73F

06/05 01:13, 6年前 , 74F
寫錯,1. mydata.extend(getData(link, mydata.word))
06/05 01:13, 74F

06/05 01:14, 6年前 , 75F
或2. mydata[:] = getData(link, mydata.word)
06/05 01:14, 75F

06/05 08:17, 6年前 , 76F
感謝您,昨晚就想說怎沒存起來,想今晚問XDD
06/05 08:17, 76F

06/05 13:03, 6年前 , 77F
感覺你的需求用dict就可以了吧
06/05 13:03, 77F

06/05 13:04, 6年前 , 78F
[{'A': [A1, A2, A3], 'B': ..}, ...]
06/05 13:04, 78F
原始想法我要能取出A,這無法,不過其實我昨天思考過後發現取A好像可以不需要, 但不確定...還要等到做到更後面才知道,如果是這樣,確實可以用您的方法

06/05 17:58, 6年前 , 79F
demo[0][0] = {demo[0][0]: addA} print(demo[0][0]['A'])
06/05 17:58, 79F
好方法,不過我原來要求讀值是用demo[0][0][0] 因為這樣我好用for迴圈讀XDD 後日談: 我找到實作Linked list的方法了!其實不難,就是用類別包起來,再指一下 class ListNode: def __init__(self, x): self.val = x self.next = None ※ 編輯: st1009 (1.163.158.139), 07/03/2018 17:50:45
文章代碼(AID): #1R5JQ7O_ (Python)
文章代碼(AID): #1R5JQ7O_ (Python)