Python 板


LINE

不才小萌新想要請教各位前輩大大 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://webptt.com/m.aspx?n=bbs/Python/M.1528116871.A.63F.html
1F:→ djshen: 加進去之後原本的A怎麼辦? 06/04 20:56
如果可以,我希望demo[0][0]跑出A,demo[0][0][0]跑出A的資訊A1 >///<
2F:→ gmccntzx1: 1. 先了解append()的作用,新的元素是放在最後面 06/04 20:59
好的
3F:→ gmccntzx1: 2. demo[0][0]就是'a', 但你是要把addA加到demo[0]才對 06/04 21:00
4F:→ gmccntzx1: 3. 去查一下list.insert()怎麼用吧 06/04 21:02
我粗略嘗試之後效果似乎不太對
5F:→ gmccntzx1: 補充: 根據你回文要的功能,建議你重新了解list結構ˇ 06/04 21:04
我原本以為list就是練結串列,所以應該可以直接實現我要的結構, 不過仔細研究之後好像不行 我可能接下來會嘗試用demo[0][0]的A當作dict的索引,再連到addA拿資訊吧, 謝謝您的回覆<(_ _)>
6F:→ gmccntzx1: 如果是想把A當作選到整個['A1', 'A2', 'A3']時的回傳值 06/04 21:22
7F:→ gmccntzx1: ,你可以寫一個新的class配上dict和__getitem__去處理 06/04 21:24
8F:→ gmccntzx1: (繼承list) 06/04 21:24
9F:→ gmccntzx1: 譬如說,在__getitem__()裡判斷目前取得的元素是否為 06/04 21:27
10F:→ gmccntzx1: dict,是的話回傳該dict的key. 但是這邊要注意到,dict是 06/04 21:28
11F:→ gmccntzx1: 可擴充的,所以若該dict有複數個key,那這種方法又會失效 06/04 21:29
12F:→ gmccntzx1: 有需要討論的話,可以站內信給我,我們用discord講比較快 06/04 21:30
我窩窩對python的了解不深,不太清楚__getitem__這樣高級用法,感覺您的方法好複雜 小萌新怕怕(抖抖 我現在正在研究python有沒有可能自己寫link list, 有了這個,我想要的資料結構應該都可以自己實作 discord就算了吧,您的方法對我太高深,而且我沒用discord 謝謝您 <3 太喜歡鏈結串列了,忽然覺得沒指標的語言不是很好處理資料結構Q
13F:→ djshen: linked list用index access? 06/04 21:58
我研究看看,不過我可能會考慮看看有沒有簡單的方法解我真正的問題,快昏了
14F:→ gmccntzx1: https://repl.it/repls/GrimAdorableDeskscan 06/04 22:37
15F:→ gmccntzx1: 這樣的效果是你要的嗎? 06/04 22:37
16F:→ gmccntzx1: 簡單來說,建立一個繼承list的class. 裡面多一個屬性 06/04 22:39
17F:→ gmccntzx1: `name`作為該list的名稱. 然後你要的效果就從__repr__ 06/04 22:40
18F:→ gmccntzx1: 去處理. 06/04 22:41
19F:→ gmccntzx1: 補充說明一下: 我之所以會說用discord討論是因為那個 06/04 22:49
20F:→ gmccntzx1: 註冊一下就可以用了,而且又不會透露你實際上是誰 06/04 22:49
http://codepad.org/Kycszfma 上面是我原始的code,我要產生要求效果的地方是第32行 我仔細研究之後,您給的這份code應該可以完成我的要求 非常感謝您!m(_ _)m
21F:→ gmccntzx1: https://codeshare.io 好像也是可以,只是它好像沒有單 06/04 22:52
22F:→ gmccntzx1: 純的voice chat 06/04 22:52
謝謝您提供的溝通知識 <3 其實我的問題再來一個dict應該可以解,不過我再邊處理其他事>"<
23F:推 flarehunter: d=[['a','b'],['c','d']] 06/04 22:59
24F:→ flarehunter: d[0][0] = ['A1', 'A2', d[0][0]] 06/04 22:59
25F:→ flarehunter: 你是想做這種事嗎? 06/04 22:59
不是,我是希望demo[0][0]跑出A,demo[0][0][0]跑出A的資訊A1 >"<
26F:→ gmccntzx1: 回覆關於你說的要產生第3個維度: 我的範例4中, nl原本 06/04 23:00
27F:→ gmccntzx1: 是1維,照你想要的效果來看,就是將其中一個元素重新指派 06/04 23:00
28F:→ gmccntzx1: 為一個NamedList(也就是說該元素的維度增加). 06/04 23:01
其實我剛剛又研究了一下,我發現範例3應該可以實現我要的, 只是我前面要自己加一維的樣子,感謝您<(_ _)>
29F:→ gmccntzx1: ok. 只是看完你的code,感覺你寫一個class去整理會更清 06/04 23:08
30F:→ gmccntzx1: 楚喔! 06/04 23:08
嗯,謝謝,程式能力不佳,努力切成2個fn了,之間還有互相引用, 不是很確定除了整個包起來之外的class寫法,我學py真的不多,不是很熟class的使用 如果把那兩個直接包起來,或各包一個,感覺就沒有class的好處了....
31F:推 flarehunter: 恩看不太懂你的demo要長怎樣才會符合你的需求 06/04 23:12
其實是我需求太怪了...長不太出來QAQ 不過gmccntzx1提供的程式其實算是可以實現我的想法, 他的範例3,我可以由nl[0]得到我的頭是否是我要的頭,是,我再去取後面的資料 用nl[0][0]取資料 畫成圖像是 索引 資料 A 1 2 3 B 4 5 6 C 7 8 9
32F:→ gmccntzx1: 我的意思是把你要從db抓出的東西包成一個class 06/04 23:17
我的dbtool太多引用了,暫時都會維持程序導向,不會改物件導向以保持一致 如果不是說這個...因為我真的沒包過db,不是很清楚您說的是甚麼意思, 我也覺得我得程式亂亂的,但想不到更好寫法,還請您賜教
33F:→ gmccntzx1: 目前看來,你應該是想要抓出word,然後再根據word抓出 06/04 23:19
34F:→ gmccntzx1: 其他東西. 06/04 23:19
是的,我要抓關鍵字,再依照關鍵字去抓wiki裏面出現該關鍵字的文章ID
35F:→ djshen: 我很好奇你之前怎麼用linked list 06/04 23:26
C++寫貪吃蛇 :P 一隻在8*8 led 上面跑的貪吃蛇,用按鈕控制左右,吃到東西就新增linked list這樣 不然就是一個可以新增刪除修改搜尋的會員管理系統,會把資料存到txt檔裡這樣也是c++
36F:→ djshen: c++寫linked list你有像這篇一樣用demo[0][0]拿資料? 06/04 23:43
對不起,沒有QAQQQ 但我想說我每個節點的值可以讀,所以讀到demo[0][0]的值A, 然後在順著他指的link讀接下來的值 不過用linked list就不是長demo[0][0],然後每個節點會有兩個link, 一個指下一筆資料,一個指向該節點資料,大約這樣子
37F:→ gmccntzx1: https://repl.it/repls/PoorStupidDisassembler 06/04 23:46
38F:→ gmccntzx1: 新增一個Class MyData,用這個去存你要的資料. 這樣至少 06/04 23:47
39F:→ gmccntzx1: 比一直用list[m][n][o]去抓資料容易懂 06/04 23:47
40F:→ gmccntzx1: 其他你寫的東西我有稍微修改,不過整體沒有動到. 06/04 23:48
41F:→ gmccntzx1: 等你確定做出要的功能後,再自己把code整理一下吧 06/04 23:49
42F:→ gmccntzx1: 重貼 http://codepad.org/rTnBeOrz (上面的沒存成功) 06/04 23:52
我研究一下,我用eval是因為我有陣列存在DB,用eval讀他
43F:→ gmccntzx1: 了解. 那剩下的你再試試看囉 06/04 23:55
好的我再試試
44F:→ gmccntzx1: 記得你的那個叫做list的method最好改一下名稱. 06/04 23:55
原來想說就表單,沒想到名稱重複的問題,之後會改掉,感謝您 <3
45F:→ gmccntzx1: 我的46行寫錯,左值應該要改成category[i] 06/04 23:58
好的感謝您 <3
46F:→ gmccntzx1: 等等...我搞錯了. 那行不用改G_G 06/05 00:00
好唷XDD
47F:→ gmccntzx1: 因為那邊本來就是要把category[i][j]這個word換成 06/05 00:01
48F:→ gmccntzx1: MyData. 暈了我... 06/05 00:01
想開點,看到您寫的class我覺得您真的很強大, 我沒學過python,所以還不完全看的懂>////< ※ 編輯: st1009 (1.163.158.239), 06/05/2018 00:07:43
49F:→ gmccntzx1: 別想的太複雜. 06/05 00:09
50F:→ gmccntzx1: 1. __init__()就是物件的建構式,我在裡面加上word這個 06/05 00:10
51F:→ gmccntzx1: 欄位,方便之後底下的__repr__去處理你要的功能. 06/05 00:10
init會那麼複雜是因為繼承了python原有的list物件是嘛?
52F:→ gmccntzx1: 2. __repr__()是回傳物件的表示,像是print(object)時, 06/05 00:12
53F:→ gmccntzx1: 就會去呼叫物件的__repr__() 06/05 00:12
細節譬如str(self[:])不懂在做啥,不過大約知道怎用了吧...
54F:→ gmccntzx1: __init__()裡面,第一行是取出kwargs中為word的值 06/05 00:25
55F:→ gmccntzx1: kwargs是一個dict,所以如果kwargs裡沒有key為word的值 06/05 00:26
56F:→ gmccntzx1: 的話,就會回傳None. 06/05 00:27
57F:→ gmccntzx1: 第二行super(...).__init__(...)則是呼叫父類別(list) 06/05 00:28
58F:→ gmccntzx1: 的建構式__init__(). 06/05 00:28
59F:→ gmccntzx1: self[:] ← 因為MyData是list,所以self[:]就是取出list 06/05 00:30
60F:→ gmccntzx1: 內的所有元素. 06/05 00:30
61F:→ gmccntzx1: 後面的if else就相當於C的三元運算子 06/05 00:31
大約明白一些了,請問那個滿滿的*號是甚麼意思? __init__函式裡的前3個引數有特殊意義,還是自定義的? 我開始再思考以後如何複製這個用法了了
62F:→ gmccntzx1: 再稍微修改後的結果: http://codepad.org/QcD1aN0Z 06/05 00:34
63F:→ gmccntzx1: 關於*args和**kwargs,看一下這個連結的說明 06/05 00:37
64F:→ gmccntzx1: https://stackoverflow.com/questions/3394835 06/05 00:37
65F:→ gmccntzx1: args和kwargs只是變數名稱,不一定非要用這幾個字 06/05 00:38
我覺得一步步看著自己親手打的程式愈來愈高級, 有種恍惚感,很高興有這樣學習的機會! 真心感謝您,已不知如何形容我的感謝了m(_ _)m
66F:→ gmccntzx1: 然後在class裡面self這個關鍵字是指`物件自己` 06/05 00:39
self這個用法我剛好知道XDD 好像哪裡有看過一樣的用法
67F:→ gmccntzx1: 不過正確說,`self`是大家常用的詞,不算是keyword 06/05 00:42
竟然!我一直以為是keyword
68F:→ gmccntzx1: ok的! 有問題就再更新內容吧 06/05 00:43
好的謝謝您,明天要考試,再看一下應該就睡了,您也早點休息吧,晚安
69F:→ gmccntzx1: 那算是coding style (詳見PEP8),就跟class method的第 06/05 00:44
70F:→ gmccntzx1: 一個參數常用cls或clz一樣 06/05 00:45
71F:→ gmccntzx1: ok 加油囉y 06/05 00:45
謝謝 <3
72F:→ gmccntzx1: 突然想到,44行 mydata = getData(link, mydata.word) 06/05 01:11
73F:→ gmccntzx1: 要改成1. mydata.append(getData(link, mydata.word)) 06/05 01:12
74F:→ gmccntzx1: 寫錯,1. mydata.extend(getData(link, mydata.word)) 06/05 01:13
75F:→ gmccntzx1: 或2. mydata[:] = getData(link, mydata.word) 06/05 01:14
76F:→ st1009: 感謝您,昨晚就想說怎沒存起來,想今晚問XDD 06/05 08:17
77F:推 flarehunter: 感覺你的需求用dict就可以了吧 06/05 13:03
78F:→ flarehunter: [{'A': [A1, A2, A3], 'B': ..}, ...] 06/05 13:04
原始想法我要能取出A,這無法,不過其實我昨天思考過後發現取A好像可以不需要, 但不確定...還要等到做到更後面才知道,如果是這樣,確實可以用您的方法
79F:→ pzyc79: demo[0][0] = {demo[0][0]: addA} print(demo[0][0]['A']) 06/05 17:58
好方法,不過我原來要求讀值是用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







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:BabyMother站內搜尋

TOP