>>A=[1,2,3]>>>B=[4,5,6]>>>C=A+B>>>C[1,2,3,4,5,6]2." />

亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Python 列表 List

系統 1742 0

列表 List 讓 Python 的資料型態 Data Type 更有彈性。列表中的值稱為元素 element 或列表項 item。

列表的定義如下:

[ item1, item2, item3, ...]

列表中元素的 data type 可為任意項,甚至可以是嵌入 Nested 列表,例如:

['Apple', 85, ['Big', 'Small'], 4.0]

列表可被視為一個集合 Set。

1. 子集合相加

>>> A = [ 1, 2, 3 ]
>>> B = [ 4, 5, 6 ]?

>>> C = A + B
>>> C
[1, 2, 3, 4, 5, 6]

2. 次集合

>>> C[1:3]
[2, 3]

3. 變更元素

>>> C[0] = 99

>>> C

[99, 2, 3, 4, 5, 6]

?4. 遍歷列表

>>> for i in C:
...??? print (i)
...
99
2
3
4
5
6

5. 刪除元素

>>> C.pop(1)
2
>>> C
[99, 3, 4, 5, 6]

6. 列表與字符串

字符串String是字符的序列,而列表List是值的序列。

>>> S = 'rice'
>>> T = list(S)
>>> T
['r', 'i', 'c', 'e']

?

>>> S = S + ' noodle'
>>> T = list(S)
>>> T
['r', 'i',

'c', 'e', ' ', 'n', 'o', 'o', 'd', 'l', 'e']

將字符拆成單個字母

>>> S
'rice noodle'
>>> T= S.split()
>>> T
['rice', 'noodle']?

?

>>> S = 'rice, noodle'
>>> T = S.split(',')
>>> T
['rice', ' noodle']

這裡有個遺憾: 字串 S 中 rice 與 noodle 有個多餘的空格,當轉化為 List 後,逗號此分隔符 delimiter 沒有去掉多餘的空白。

>>> A = 'rice'
>>> B = 'rice'
>>> id(A)
37429464
>>> id(B)
37429464
>>> A is B
True

A 與 B 看是不同的對象 Object,但事實上 A 與 B 都是指標 Pointer,存放相同的值 37429464,這值指向位址為 37429464,而值為 'rice',所以 A 與 B 引用同一個對象。但,列表就不一樣:

>>> X = ['rice']
>>> Y = ['rice']
>>> id(X)
37364168
>>> id(Y)
34540488
>>> X is Y
False

列表 X 與 Y 是不同的對象,這 2 個列表有相同的元素,所以是相等的 Equivalent,但它們是不同的對象,所以不是相同的 Identical。

?但,若給 X 取個別名 Alias 為 Y 呢?

>>> Y = X
>>> id(X)
37364168
>>> id(Y)
37364168
>>> X is Y
True

這裡很清楚別名 Y 的位址指向與 X 相同,它們都指向同一個對象。

其次,區分 修改列表 的操作與 新建列表 的操作很重要。例如: append 方法修改列表,但, + 號操作新建立一個列別:

>>> Z = X.append('noodle')
>>> X
['rice', 'noodle']
>>> Z
>>> id(X)
37364168
>>> id(Z)
8791418547424
>>> Z
>>> X is Z
False

物件 X 引用函數 append,之後改變物件的存放值,並沒有因指定 Assign 給 Z,而新增一個物件 Z。


>>> X.append('bread')
>>> X
['rice', 'noodle', 'bread']
>>> id(X)
37364168

?以上就是明顯得例子。但,+ 號操作就不同, 例如:

>>> Y = X + ['soup']
>>> X
['rice', 'noodle', 'bread']
>>> Y
['rice', 'noodle', 'bread', 'soup']
>>> id(X)
37364168
>>> id(Y)
34571912

?運用 + 號操作,新增物件 Y,而這操作並不會改變原來物件 X 的值。

事實上 Python 也有 Call By Value (傳值) 與 Call By Address (傳址) 這概念。Call By Value 的操作不會改變原來物件 Object 的值,而 Call By Address 則會改變物件的值。 這觀念相當重要

?>>> def replace(X,Y):
...??? Z = X
...??? X = Y
...??? Y = Z
...??? print(X,Y)
...
>>> X = 2
>>> Y = 3
>>> replace(X,Y)
3 2
>>> X
2
>>> Y
3

因為是 Call By Value,函數 replace(X,Y) 並沒有改變原來的 X 與 Y 值。

?>>> def replace_new(X,Y):
...???? Z = X
...???? X = Y
...???? Y = Z
...???? return X,Y

>>> X = 2
>>> Y = 3

>>> (X,Y) = replace_new(X,Y)
>>>
>>> X
3
>>> Y
2

Python 支援 Call By Reference 嗎? 依據參考[1] Python 不支援。

?

參考

1. Python: Call by Reference, https://stackoverflow.com/questions/47131458/python-call-by-reference

2. Facts and myths about Python names and values, https://nedbatchelder.com/text/names.html

/end


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 日本不卡中文字幕一区二区 | 婷婷国产偷v国产偷v亚洲 | 九九99久久 | 午夜伦y4480影院中文字幕 | 九九在线免费观看视频 | 国产成人免费视频精品一区二区 | 国产成人教育视频在线观看 | 国产h版大片在线播放 | 精品推荐 国产 | 人妖粗暴刺激videos | 91国内精品视频 | 美女在线看永久免费网址 | 国产成人久久久精品毛片 | 午夜精品久久久久久久2023 | 亚洲一区二区免费在线观看 | 久久性| 亚洲日本人成网站在线观看 | 99ri精品视频在线观看播放 | 奇米色在线 | 曰本三级男人吃奶水 | 青青热久免费精品视频在线观看 | 国产人做人爱视频精品 | 一级毛片看真人在线视频 | 国产亚洲美女 | 九九爱www高清免费人成 | 韩毛片| 午夜色网| 国产综合另类小说色区色噜噜 | 国产午夜精品理论片久久影视 | 中文字幕亚洲欧美 | 日韩视频 中文字幕 | 日日噜噜夜夜狠狠久久丁香 | 亚洲91av| 国内国产精品天干天干 | 久久99爱re热视 | 天天干妹子| 国产精品久久久久久久hd | 国产资源一区 | 九九夜夜操妹子 | 五月婷婷国产 | 亚洲国产精品免费视频 |