笑谈python基本数据类型 列表list&元组tuple
列表
python中list的写法让我们不经想起java和c中的数组。但python中的列表比数组功能更加强大,主要体现在两个方面:
1.不需要指定长度,长度动态分配
2.列表中可以存放各种各样的数据类型
列表是可变的,有序的。列表可以嵌套。
关于列表的存储方式:这里参考于:
1.如果列表中存储的是同一种数据类型的数据,则列表中元素的地址是连续的,采用顺序表结构存储。可以通过下标进行访问。这种情况下则类似与java、c语言中的数组
2.如果列表中的数据不是同一种数据类型,此时就不是采用顺序表存储了,而是首先对每个元素分配好空间,空间不一定连续,然后把地址值作为数据存储到另外的空间中,一个内存地址占用四个字节,这个时候内存地址的数据占用的四个地址空间是连续的。
如下图表示:
list的常用方法:
增
append(e)//在列表的末尾添加元素,并且一次只能添加一个元素。
如果e是列表、元祖、集合,则把他们作为一个整体加到列表末尾处
注意一个细节:
当企图这样输出时,发现输出结果为none,可以推出append()方法没有返回值
extend(e)//e是有限制的,必须是可迭代的,我们可以通俗地理解为带下标的。int/bool/float就不通过extend()方法添加。
如果e是字符串,那么会循环遍历该字符串,将字符串一个一个字符取出,然后添加到集合中
如果e是列表/元祖,也是循环遍历取出,然后再添加到列表
如果e是集合,则是循环遍历取出集合中的key,然后再添加到列表中
insert(index,e)//在指定位置插入元素
删
del
pop(index)//通过下标删除
使用pop(index)方法删除时,会得到一个返回值
remove(e)//通过元素删除
通过上面的测试,我们可以推出,使用remove(e)方法删除时,会循环遍历列表,匹配我们传入的参数,并删除第一次出现的位置的元素。如果要删除的元素不存在,则报错。
clear()//清空列表
改
其他操作:
sort();//无返回值
通过上述操作,我们可以知道,sort()方法对字母排序时是按照ascii表的顺序.中文排序方式未知。
sorted()
sorted()//返回一个排好序的新列表,保存了原来的列表,而sort()不保存原来的列表。
此外:
sorted(e)适用于其他任何数据类型,以列表的形式返回
逆序
reverse()//逆序排列
reversed(e)////返回一个逆序后的新列表,保存了原来的列表,而reverse()不保存原来的列表。
这里存在困惑,个人推测,这个方法,reversed(e)内部调用了类似与java中的toString方法,但没有重写toString(),所以返回的是地址值。
len()/count()/与字符串中用法基本一致,不再赘述。
支持+ *
元组
元组与list很类似,只不过元组比列表多了许多限制:
1.元组中的数据必须是不可变类型
2.元组中的一级元素不允许修改。
注意事项:当元组中只有一个元素时,需要在元素后面添加一个逗号,否则会被当作运算符使用。
对于元祖,我们可以修改他的非一级元素
删除元祖:del(t)
len()/count()与用法字符串基本一致,不再赘述。