Python学习日记-List和Tuple

本章目录

  • Part One:List
  • Part Two:Tuple

List和Tuple跟Java中的列表和数组概念差不多,不过Python的List比Java的List更灵活,而Python的Tuple比Java的数组更严格。

List(集合)

Java的List主要由三个概念,照搬过来一点儿也不违和:

  • List集合中的数据是序列的,即先添加到集合中的数据会出现在集合中相对更靠前的位置,反之,后添加的数据则出现在更靠后的位置。
  • List集合中的数据是可以重复的,即使2个变量引用到同一个数据,向集合中添加这2个变量后,集合中会出现2个一样的数据。
  • List集合中的数据都有索引,每个数据所独有的、从0开始顺序编号的数字。

当然,写法上肯定是有区别。

  1. 最简单的list定义
tarena_train = ["Java", "Android", "Python"]
# str方法是将list转化为字符串用于拼接
string1 = "list内容为" + str(tarena_train)
print(string1)
# 也可在print里面拼接打印,sep参数是去除字符串拼接的空格
print("list内容为", tarena_train, sep="")

结果为:

list内容为['Java', 'Android', 'Python']
list内容为['Java', 'Android', 'Python']
  1. 获取list长度
print("数组长度为", len(tarena_train), sep="")

结果为:

数组长度为3
  1. 根据索引显示list元素,起始为0,末尾为len - 1
print("list起始值", tarena_train[0], sep="")
print(tarena_train[1])
print("list末尾值", tarena_train[len(tarena_train) - 1], sep="")

结果为:

list起始值Java
Android
list末尾值Python
  1. 也可用负数索引,-1为末尾,-len就是起始
print("list起始值", tarena_train[-len(tarena_train)], sep="")
print("list末尾值", tarena_train[-1], sep="")

结果为:

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

结果为:

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

结果为:

['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)

结果为:

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

结果为:

['IOS', 'Python']
  1. list元素的数据类型可以不同
test = ["Tom", "Jerry", 1, 2]
print(test)

结果为:

['Tom', 'Jerry', 1, 2]
  1. list可以嵌套,即list的元素也可以是list,可以理解为二维空间,也可参照json的写法,思路一样
temp1 = ["Tom", "Jerry"]
temp2 = ["Android", "Java", temp1]
print(temp2)

结果为:

['Android', 'Java', ['Tom', 'Jerry']]
  1. 要拿到多重list中的值,可以用内层list的索引,或者用多维索引
print(temp1[0])
print(temp2[2][0])

结果为:

Tom
Tom

Tuple(元组)

tuple和list的概念很类似,只不过它更严格一些,一旦初始化就不能再改变了。所以,我们可以把list理解为一个变量列表,而tuple可以理解为一个常量列表。

  1. 最简单的tuple定义
# 普通的tuple案例
tarena_train = ("Java", "Android", "Python", 2)
print("tuple内容为:", tarena_train, sep="")

结果为:

tuple内容为:('Java', 'Android', 'Python', 2)
  1. tuple通过索引取值
# 可以通过正负数索引获取tuple中该位置的值,也是从0开始
print("tuple元组起始位置的值为:" + tarena_train[0])
print("tuple元组末尾位置的值为:{}".format(tarena_train[len(tarena_train) - 1]))
print("tuple元祖正数索引和负数索引的值是否相等?{}".format(tarena_train[len(tarena_train) - 1] == tarena_train[-1]))

结果为:

tuple元组起始位置的值为:Java
tuple元组末尾位置的值为:2
tuple元祖正数索引和负数索引的值是否相等?True
  1. 一个元素的tuple
# 以下定义的不是tuple,是1这个数,所以会报提示()是多余的
# 这是因为括号()既可以表示tuple,又可以表示数学公式中的小括号,这就产生了歧义。
# 因此,Python规定,这种情况下,按小括号进行计算,计算结果自然是1。
sample1 = (1)
print("普通变量的值为{}".format(sample1))

# 只有一个元素的tuple要加逗号消除歧义。
# 不过也不需要太在意,只有一个元素的tuple感觉没啥意义,就一个语法规则而已。
# 从打印上也可以看出,普通变量和tuple变量的区别
sample2 = (1, )
print("tuple变量的值为{}".format(sample2))

结果为:

普通变量的值为1
tuple变量的值为(1,)
  1. tuple值不可变,否则会出异常
# tuple的值是不可改变的,强行赋值会引发异常。
# 但是这也意味着安全性更高,所以在使用前要设计好到底使用list还是tuple
tarena_train[-1] = "C"
print(tarena_train)

结果为:

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中list的值
list_temp = ["C", "C++"]
tuple_sample2 = ("Android", "Python", list_temp)
print(tuple_sample2)
tuple_sample2[2][1] = "Java"
print(tuple_sample2)

结果为:

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

按我的理解,tuple保存的是对象,不是引用,指向的对象地址不变,但是对象的内容可以变。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 与或运算 在计算 a and b 时,如果 a 是 False,则根据与运算法则,整个结果必定为 False,因此...
    张文靖同学阅读 321评论 0 1
  • 最近在慕课网学习廖雪峰老师的Python进阶课程,做笔记总结一下重点。 基本变量及其类型 变量 在Python中,...
    victorsungo阅读 1,735评论 0 5
  • 昨天被某人嘲讽胖了,我已经深深受到伤害了,新年第一个目标就是回到图一现在应该是138斤或许更多,立个小目标...
    煮海三杯水阅读 296评论 0 4
  • 弥茶学琴记––第二天 2017.7.31 练琴可以说是一场独自修行吧,因为练琴时需要的情绪、感情不是摇摇脑袋、做几...
    琴人弥茶阅读 183评论 0 1
  • 欢迎戳进来【归尘】目录 【上一章】归尘(4)鬼船 前情摘要: 空中突然电闪雷鸣,黑云翻滚,姜晨定睛望去,自黑云中驶...
    傅人阅读 1,441评论 43 30