Python學(xué)習(xí)日記-List和Tuple

本章目錄

  • Part One:List
  • Part Two:Tuple

List和Tuple跟Java中的列表和數(shù)組概念差不多,不過Python的List比Java的List更靈活,而Python的Tuple比Java的數(shù)組更嚴(yán)格。

List(集合)

Java的List主要由三個概念,照搬過來一點兒也不違和:

  • List集合中的數(shù)據(jù)是序列的,即先添加到集合中的數(shù)據(jù)會出現(xiàn)在集合中相對更靠前的位置,反之,后添加的數(shù)據(jù)則出現(xiàn)在更靠后的位置。
  • List集合中的數(shù)據(jù)是可以重復(fù)的,即使2個變量引用到同一個數(shù)據(jù),向集合中添加這2個變量后,集合中會出現(xiàn)2個一樣的數(shù)據(jù)。
  • List集合中的數(shù)據(jù)都有索引,每個數(shù)據(jù)所獨有的、從0開始順序編號的數(shù)字。

當(dāng)然,寫法上肯定是有區(qū)別。

  1. 最簡單的list定義
tarena_train = ["Java", "Android", "Python"]
# str方法是將list轉(zhuǎn)化為字符串用于拼接
string1 = "list內(nèi)容為" + str(tarena_train)
print(string1)
# 也可在print里面拼接打印,sep參數(shù)是去除字符串拼接的空格
print("list內(nèi)容為", tarena_train, sep="")

結(jié)果為:

list內(nèi)容為['Java', 'Android', 'Python']
list內(nèi)容為['Java', 'Android', 'Python']
  1. 獲取list長度
print("數(shù)組長度為", len(tarena_train), sep="")

結(jié)果為:

數(shù)組長度為3
  1. 根據(jù)索引顯示list元素,起始為0,末尾為len - 1
print("list起始值", tarena_train[0], sep="")
print(tarena_train[1])
print("list末尾值", tarena_train[len(tarena_train) - 1], sep="")

結(jié)果為:

list起始值Java
Android
list末尾值Python
  1. 也可用負(fù)數(shù)索引,-1為末尾,-len就是起始
print("list起始值", tarena_train[-len(tarena_train)], sep="")
print("list末尾值", tarena_train[-1], sep="")

結(jié)果為:

list起始值Java
list末尾值Python
  1. list可以用append方法默認(rèn)添加元素到末尾
var1 = "C"
tarena_train.append(var1)
print(tarena_train)

結(jié)果為:

['Java', 'Android', 'Python', 'C']
  1. list可以用insert(索引,值)指定添加元素的位置,原先該位置以后的元素后移一位
var2 = "PHP"
tarena_train.insert(2, var2)
print(tarena_train)

結(jié)果為:

['Java', 'Android', 'PHP', 'Python', 'C']
  1. 刪除可以用pop,remove或者del
# pop(索引)是刪除指定位置的元素,并返回該元素的值
print(tarena_train.pop(0))
print(tarena_train)
# remove(元素)是從list中刪除該元素,此方法無返回值;如果list中不存在該元素,會拋出異常
print(tarena_train.remove("C"))
print(tarena_train)
# del list[索引]也是刪除指定位置的元素,但無返回值
del tarena_train[1]
print(tarena_train)

結(jié)果為:

Java
['Android', 'PHP', 'Python', 'C']
None
['Android', 'PHP', 'Python']
['Android', 'Python']
  1. 可以修改list中指定索引位置的值
tarena_train[0] = "IOS"
print(tarena_train)

結(jié)果為:

['IOS', 'Python']
  1. list元素的數(shù)據(jù)類型可以不同
test = ["Tom", "Jerry", 1, 2]
print(test)

結(jié)果為:

['Tom', 'Jerry', 1, 2]
  1. list可以嵌套,即list的元素也可以是list,可以理解為二維空間,也可參照json的寫法,思路一樣
temp1 = ["Tom", "Jerry"]
temp2 = ["Android", "Java", temp1]
print(temp2)

結(jié)果為:

['Android', 'Java', ['Tom', 'Jerry']]
  1. 要拿到多重list中的值,可以用內(nèi)層list的索引,或者用多維索引
print(temp1[0])
print(temp2[2][0])

結(jié)果為:

Tom
Tom

Tuple(元組)

tuple和list的概念很類似,只不過它更嚴(yán)格一些,一旦初始化就不能再改變了。所以,我們可以把list理解為一個變量列表,而tuple可以理解為一個常量列表。

  1. 最簡單的tuple定義
# 普通的tuple案例
tarena_train = ("Java", "Android", "Python", 2)
print("tuple內(nèi)容為:", tarena_train, sep="")

結(jié)果為:

tuple內(nèi)容為:('Java', 'Android', 'Python', 2)
  1. tuple通過索引取值
# 可以通過正負(fù)數(shù)索引獲取tuple中該位置的值,也是從0開始
print("tuple元組起始位置的值為:" + tarena_train[0])
print("tuple元組末尾位置的值為:{}".format(tarena_train[len(tarena_train) - 1]))
print("tuple元祖正數(shù)索引和負(fù)數(shù)索引的值是否相等?{}".format(tarena_train[len(tarena_train) - 1] == tarena_train[-1]))

結(jié)果為:

tuple元組起始位置的值為:Java
tuple元組末尾位置的值為:2
tuple元祖正數(shù)索引和負(fù)數(shù)索引的值是否相等?True
  1. 一個元素的tuple
# 以下定義的不是tuple,是1這個數(shù),所以會報提示()是多余的
# 這是因為括號()既可以表示tuple,又可以表示數(shù)學(xué)公式中的小括號,這就產(chǎn)生了歧義。
# 因此,Python規(guī)定,這種情況下,按小括號進行計算,計算結(jié)果自然是1。
sample1 = (1)
print("普通變量的值為{}".format(sample1))

# 只有一個元素的tuple要加逗號消除歧義。
# 不過也不需要太在意,只有一個元素的tuple感覺沒啥意義,就一個語法規(guī)則而已。
# 從打印上也可以看出,普通變量和tuple變量的區(qū)別
sample2 = (1, )
print("tuple變量的值為{}".format(sample2))

結(jié)果為:

普通變量的值為1
tuple變量的值為(1,)
  1. tuple值不可變,否則會出異常
# tuple的值是不可改變的,強行賦值會引發(fā)異常。
# 但是這也意味著安全性更高,所以在使用前要設(shè)計好到底使用list還是tuple
tarena_train[-1] = "C"
print(tarena_train)

結(jié)果為:

TypeError: 'tuple' object does not support item assignment  
  1. tuple可以改變list索引的值
# 如果用變量作為tuple的元素,變量的值改變,但是tuple值不變
temp = "Java"
tuple_sample1 = (temp, "Android", "Python")
print(tuple_sample1)
temp = "PHP"
print(tuple_sample1)

# 如果用list作為tuple的元素,可以用索引改變tuple中l(wèi)ist的值
list_temp = ["C", "C++"]
tuple_sample2 = ("Android", "Python", list_temp)
print(tuple_sample2)
tuple_sample2[2][1] = "Java"
print(tuple_sample2)

結(jié)果為:

('Java', 'Android', 'Python')
('Java', 'Android', 'Python')
('Android', 'Python', ['C', 'C++'])
('Android', 'Python', ['C', 'Java'])

按我的理解,tuple保存的是對象,不是引用,指向的對象地址不變,但是對象的內(nèi)容可以變。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 與或運算 在計算 a and b 時,如果 a 是 False,則根據(jù)與運算法則,整個結(jié)果必定為 False,因此...
    張文靖同學(xué)閱讀 359評論 0 1
  • 最近在慕課網(wǎng)學(xué)習(xí)廖雪峰老師的Python進階課程,做筆記總結(jié)一下重點。 基本變量及其類型 變量 在Python中,...
    victorsungo閱讀 1,940評論 0 5
  • 昨天被某人嘲諷胖了,我已經(jīng)深深受到傷害了,新年第一個目標(biāo)就是回到圖一現(xiàn)在應(yīng)該是138斤或許更多,立個小目標(biāo)...
    煮海三杯水閱讀 347評論 0 4
  • 彌茶學(xué)琴記––第二天 2017.7.31 練琴可以說是一場獨自修行吧,因為練琴時需要的情緒、感情不是搖搖腦袋、做幾...
    琴人彌茶閱讀 199評論 0 1
  • 歡迎戳進來【歸塵】目錄 【上一章】歸塵(4)鬼船 前情摘要: 空中突然電閃雷鳴,黑云翻滾,姜晨定睛望去,自黑云中駛...
    傅人閱讀 1,528評論 43 30

友情鏈接更多精彩內(nèi)容