python基础3——列表和元组

版权声明:本文为博主原创文章,转载请注明出处哦。 https://blog.csdn.net/ZiTeng_Du/article/details/79979723

列表是可变的。

一、list函数
使用list函数可以将其他序列数据转换为列表形式,也就是可以利用list函数进行数据类型的转换,之后会专门写一篇是说明几种数据类型转换的内容的。

>>> list(s)
['h', 'e', 'l', 'l', 'o']
>>> t = (1,2,3,4)
>>> list(t)
[1, 2, 3, 4]

二、基本的列表操作
前面已经写过了所有序列类型的数据的共有操作,那当然列表也就有索引、切片、连接、乘法、成员所属等操作了,这里不再赘述这些,有需要的同学可以查阅这篇博文
下面来看看列表的一些基本操作。
1、改变列表:元素赋值
可以利用索引进行赋值:

>>> li = [1,2,3]
>>> li[1] = 100
>>> li
[1, 100, 3]

注意:因为Python中是先建立一个空列表,这时并不指定空间大小,而是随着你在裂变里添加数据才会在你添加的同时建立空间进行数据存储,但是当你删除一些数据的时候它可以为了不频繁的扩删空间,可能你把数据删除了它并没有把那些空间释放掉。之后会专门写一篇Python内存控制机制的。
因为建立空列表的同时没有指定空间,所以不能为一个位置不存在的元素进行赋值,因为位置不存在意味了内存中还没有建立这个元素的空间,所以不能这样赋值,除非你利用None为一个空列表进行一定空间的初始化操作,这样就建立了一个有一定空间的列表。

>>> li = [None,None,None,None]
>>> li
[None, None, None, None]
>>> li[2] = 100
>>> li
[None, None, 100, None]
>>> li[5] = 999      #不能为不存在的位置赋值
Traceback (most recent call last):
  File "<pyshell#41>", line 1, in <module>
    li[5] = 999
IndexError: list assignment index out of range

None是一个Python内置的值,表示空的含义。

2、删除元素
从列表中删除元素很容易,使用del语句来实现。

>>> name = ['alice','bech','ceicl','dee']
>>> del name[2]
>>> name
['alice', 'bech', 'dee']

3、分片赋值
分片是一个非常强大的功能。

>>> name = list('Perl')
>>> name
['P', 'e', 'r', 'l']
>>> name[2:] = list('ar')
>>> name
['P', 'e', 'a', 'r']

使用分片赋值时,可以使用与原序列不等长的序列将分片进行替换。

>>> name = list('Perl')
>>> name[1:] = list('ython')
>>> name
['P', 'y', 't', 'h', 'o', 'n']

分片赋值可以在不需要替换任何原有元素的情况下插入新的元素。(本身numbers[1:1]是[],所以这里可以实现不改变任何元素的基础上插入新的元素)。

>>> numbers = [1,5]
>>> numbers[1:1] = [2,3,4]
>>> numbers
[1, 2, 3, 4, 5]

注意这里和索引赋值的差别,上面的情况,本身切片就是一个范围,然后我将一个范围的数据替换为另一个范围的数据可以做到这样数据的插入,假如我上面不再是numbers[1:1] = [2,3,4]而是numbers[1] = [2,3,4],那结果会变成numbers = [1,[2,3,4],5],一定要注意这里的差别。
类似的,其实我们可以利用上述功能来进行列表的删除

>>> numbers[2:3] = []
>>> numbers
[1, 2, 4, 5]

或者我们可以使用切片再拼接的方式进行元素删除

>>> numbers = numbers[:2] + numbers[3:]
>>> numbers
[1, 2, 5]

三、列表方法
方法的调用:对象.方法(参数)
(1)append
append方法用于在列表末尾追加新的对象: 对象.append(value)

>>> li = [1,3,5]
>>> li.append(999)
>>> li
[1, 3, 5, 999]

注意append不是返回一个修改过的新列表,而是直接修改原来的列表,因为列表为可变对象。
(2)count
count方法用于统计某个元素在列表中出现的次数。对象.count(value)

>>> li = [1,2,3,1,4,2,4,5,6]
>>> li.count(1)
2

(3)extend
extend方法可以在列表的末尾一次性追加另一个序列中的多个值。对象.extend(list)

>>> li = [1,2,3]
>>> li.extend([4,5,6])
>>> li
[1, 2, 3, 4, 5, 6]

这个操作看起来特别像连接操作,两者的主要区别在于,extend方法修改了被扩展的序列,而原始的列表相加的操作则没有修改原序列,而是返回了一个新的连接之后的序列。

>>> li
[1, 2, 3, 4, 5, 6]
>>> li + [100,100,100]
[1, 2, 3, 4, 5, 6, 100, 100, 100]
>>> li
[1, 2, 3, 4, 5, 6]

(4)index
用于找出列表中某个值第一个匹配项的索引位置。对象.index(value)

>>> li = [34,23,12,33,56,12]
>>> li.index(12)
2

(5)insert
用于将对象插入到列表中。对象.insert(位置,值)

>>> li = [1,2,3]
>>> li.insert(1,999)
>>> li
[1, 999, 2, 3]

(6)pop
移除列表中的元素,使用有下列两种情况:
- 无参数:对象.pop()——返回列表最后一个值。有点像出栈的操作。
- 有参数:对象.pop(索引)——pop出指定位置的值。

>>> li = [1,2,3,4,5]
>>> li.pop()
5
>>> li
[1, 2, 3, 4]
>>> li.pop(1)
2
>>> li
[1, 3, 4]

用pop可以实现栈的操作,pop可以代替出栈的操作,上面提到的append可以替代入栈的操作。
(7)remove
移除列表中的某个值的第一个匹配项。对象.remove(value)

>>> li = [2,3,4,2,5,2]
>>> li.remove(2)
>>> li
[3, 4, 2, 5, 2]

注意remove是没有返回值的原位置改变的方法。它修改了列表却没有返回值,而pop返回移除的值。
(8)reverse
将列表中的元素反向存放。对象.reverse()

>>> li
[3, 4, 2, 5, 2]
>>> li.reverse()
>>> li
[2, 5, 2, 4, 3]

(9)sort
在原位置对列表进行排序,没有返回值。默认是升序排序(reverse=False)。
这里注意,sort以后原列表直接发生了改变,返回值为None。

>>> li
[2, 5, 2, 4, 3]
>>> print(li.sort())
None
>>> li
[2, 2, 3, 4, 5]

如果你想不改变原列表并且得到把原列表排序后的列表的话,可以使用sorted方法:

>>> li = [6,3,4,8,1,9]
>>> sorted(li)
[1, 3, 4, 6, 8, 9]
>>> li
[6, 3, 4, 8, 1, 9]

高级排序:
让列表按照特定的方式进行排序:
sort方法有两个参数可以帮助我们进行排序规则的制定——key和reverse
key参数可以用来指定排序的关键字,也就是以什么标准进行排序,一般是个方法,可以是内置方法也可以是自定义的函数。

>>> li = ['hello','lala','bigworld','du']
>>> li.sort(key=len)       #len是一个求长度的内置方法
>>> li
['du', 'lala', 'hello', 'bigworld']

sort默认是升序排序,reverse可以设置是升序还是降序。reverse=False是升序,reverse=True是降序。

>>> li
[6, 3, 7, 2, 1, 4]
>>> li.sort()      #默认是reverse=False
>>> li
[1, 2, 3, 4, 6, 7]
>>> li.sort(reverse=True)
>>> li
[7, 6, 4, 3, 2, 1]
>>> 

key和reverse都可以用于sorted函数。

四、元组
1、元组是不可变序列
元组是不可修改的。
创建元组非常的简单,用逗号分隔一些值就可以得到一个元组了

>>> 1,2,3              #逗号隔开组成元组
(1, 2, 3)
>>> (4,5,6)            #小括号扩着
(4, 5, 6)
>>> ()                 #空元组
()
>>> 33,                #即便一个值加逗号也可以组成一个元组
(33,)
>>> (12)               #没加逗号不能组成元组,此时(12)和12是完全一样的
12
>>> (12,)
(12,)

2、tuple函数
和list功能基本一样。可以将其他类型的数据转换成元组。

>>> tuple([1,2,3])
(1, 2, 3)
>>> tuple('abc')
('a', 'b', 'c')
>>> tuple((1,2,3))
(1, 2, 3)

3、基本元组操作
因为元组是不可变序列,所以它的操作就相对简单了,除了创建元组和访问元组元素之外,也没有太多其他操作了。当然还有我之前写过的所有序列都有的操作,比如索引分片啥的

>>> x = 1,2,3
>>> x
(1, 2, 3)
>>> x[2]
3
>>> x[1:2]
(2,)
>>> x[0:2]
(1, 2)
阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页