python基础3——列表和元组

标签: python
9人阅读 评论(0) 收藏 举报
分类:

列表是可变的。

一、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)
查看评论

python基础-字符串、列表、元组、字典、集合

一、字符串 (一)字符串的介绍 简单的字符串:双引号或者单引号之间的数据,就是字符串 print(&quot;Let's go&quot;) print(&quot;Let\'s g...
  • weixin_40304570
  • weixin_40304570
  • 2018-02-26 17:24:39
  • 37

python3入门之列表和元组

获得更多资料欢迎进入我的网站或者 csdn或者博客园 前面一张主要学习了Python的安装,以及第一个程序helloword的编写,以及简单的输入和输出函数 序列 这章主要介绍的是列表和元组...
  • peace1213
  • peace1213
  • 2015-07-14 16:48:51
  • 1651

Python——列表,元组

一、简介         列表(list)是Python以及其他语言中最常用到的数据结构之一。Python使用使用中括号 [ ] 来解析列表。列表是可变的(mutable)——可以改变列表的内容。 二...
  • bolike
  • bolike
  • 2014-02-26 23:30:07
  • 24597

Python中元组、列表、字典的遍历和相互转化

在Python中元组(tuple),列表(list)和字典(dict)都是经常用到的,它们的遍历和之间的相互转换在使用中也非常重要,下面进行相关的总结: 一、元组,列表,字典的遍历     1.1...
  • u014267402
  • u014267402
  • 2017-01-18 17:01:26
  • 15163

【编程语言】Python 列表元组排序

假设我们用一组tuple表示学生名字和成绩:L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)],请用sorted()对上述列表分别按...
  • j790675692
  • j790675692
  • 2016-07-11 15:34:11
  • 6099

Python之列表与元组的区别详解

相同点:都是序列类型回答它们的区别之前,先来说说两者有什么相同之处。list 与 tuple 都是序列类型的容器对象,可以存放任何类型的数据、支持切片、迭代等操作 foos = [0, 1, 2,...
  • qq_878799579
  • qq_878799579
  • 2017-06-08 08:45:14
  • 20502

python-列表元素为元组

示例:构造一系列的元组对象,并添加到列表中。
  • u013344915
  • u013344915
  • 2016-11-07 23:36:50
  • 1492

python中列表,元组,字符串互相转换

列表元素转换为字符串: >>> a=['hello'] >>> b=''.join(a) >>> b 'hello' >>> a=['hello','python'] >>> b=''.join(a[...
  • u010275850
  • u010275850
  • 2015-05-21 16:46:14
  • 5996

Python中元组,列表,字典的区别

转自:http://blog.sina.com.cn/s/blog_967e337b0101282f.html
  • yasi_xi
  • yasi_xi
  • 2014-08-05 13:09:58
  • 39428

python中元组和列表的比较

列表是容器类型,一般是用来存储数据的 列表,可以用来存放各式各样的数据,列表中存储数据是有序的 列表中的每条数据,都有一个索引,第一条数据的索引为0,第二条数据的索引为1,以此类推 定义列表如下...
  • dayun555
  • dayun555
  • 2018-01-23 20:15:04
  • 307
    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 7549
    积分: 676
    排名: 7万+
    博客专栏