Python入门篇之列表和元组

(编辑:jimmy 日期: 2024/11/12 浏览:2)

列表和元组的主要区别在于,列表可以修改,元组则不能。一般情况下,在几乎所有的情况下列表都可以代替元组

例如:使用序列可以表示数据库中一个人的信息(姓名,年龄)

复制代码 代码如下:
> edward=['Edward Gumby',42]

序列还可以包含其他序列

复制代码 代码如下:
> edward=['Edward Gumby',42]
> john=['John Smith',50]
> database=[edward,john]
> database
[['Edward Gumby', 42], ['John Smith', 50]]

通用序列操作
所有的序列操作都可以进行某些特定的操作。这些操作包括:索引、分片、加、乘以及检查某个元素是否属于序列的成员

索引

序列中的所有元素都是有编号的--从0开始递增。这些元素可以通过编号分别访问,如下:

复制代码 代码如下:
> greeting='hello'
> greeting[0]
'h'
> greeting[-1]
'o'
> 'hello'[1]
'e'

如果一个函数调用返回一个序列,那么可以直接对返回结果进行索引操作,例如:

复制代码 代码如下:
> fourth=raw_input('Year:')[3]
Year:2005
> fourth
'5'
 View Code
 
运行结果:

复制代码 代码如下:
>
Year: 1974
Month(1-12): 8
Day(1-31): 16
August 16th, 1974

分片

使用分片操作来访问一定范围内的元素,分片通过冒号相隔的两个索引来实现:

复制代码 代码如下:
> tag='<a herf="http://www.python.org">Python web site</a>'
> tag[9:30]
'http://www.python.org'
> tag[32:-4]
'Python web site'

第一个索引是需要提取部分的第一个元素的编号,而最后的索引则是分片之后剩下部分的第一个元素的编号

复制代码 代码如下:
> numbers=[1,2,3,4,5,6,7,8,9,10]
> numbers[3:6]
[4, 5, 6]
> numbers[0:1]
[1]

1、优雅的捷径

访问最后的三个元素,当然可以进行显示的操作

复制代码 代码如下:
> numbers[7:10]
[8, 9, 10]
> numbers[-3:-1]
[8, 9]
> numbers[-3:0]
[]
> numbers[-3:]
[8, 9, 10]

只有最后一个分片完成任务,这种方法同样适用序列开始的元素:

复制代码 代码如下:
> numbers[:3]
[1, 2, 3]

实际上,如果需要复制整个序列,可以将两个索引都置空:

复制代码 代码如下:
> numbers[:]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

2、更大的步长

分片还有第三个参数--步长,通常都是隐式设置的,在一般情况下,步长是1,不能为0,但是可以为负数,即从右往左提取元素

 测试代码
序列相加

通过使用加号可以进行序列的连接操作:

复制代码 代码如下:
> [1,2,3]+[4,5,6]
[1, 2, 3, 4, 5, 6]
> 'hello.'+'world!'
'hello.world!'
> [1,2,3]+'world!'

Traceback (most recent call last):
  File "<pyshell#107>", line 1, in <module>
    [1,2,3]+'world!'
TypeError: can only concatenate list (not "str") to list

乘法

用数字x乘以一个序列会生成新的序列,而在新的序列中,原来的序列将被重复x次

复制代码 代码如下:
> 'python'*5
'pythonpythonpythonpythonpython'
> [42]*10
[42, 42, 42, 42, 42, 42, 42, 42, 42, 42]

成员资格

为了检查一个值是否在序列中,可以使用in运算符,该运算符返回布尔值

复制代码 代码如下:
> permissions='rw'
> 'w'in permissions
True
> 'x'in permissions
False
Enter your name: mlh
True
> subject='$$$ Get rich now!!! $$$'
> '$$$'in subject
True

长度、最小值和最大值

内建函数len、min、max,len函数返回序列中所包含元素的数量,min和max函数分别返回序列中最大和最小的元素

复制代码 代码如下:
> numbers=[100,34,678]
> len(numbers)
3
> max(numbers)
678
> min(numbers)
34
> max(2,3)
3
> min(9,3,2,5)
2

list函数

list函数可以根据字符串创建列表

复制代码 代码如下:
> list('hello')
['h', 'e', 'l', 'l', 'o']

基本列表操作:
1、改变列表:元素赋值

使用索引标记来为某个特定的、位置明确的元素赋值:

复制代码 代码如下:
> x=[1,1,1]
> x[1]=2
> x
[1, 2, 1]

2、删除元素

使用del语句来实现:

复制代码 代码如下:
> names=['Alice','Beth','Ceil','Dee-Dee','Earl']
> del names[2]
> names
['Alice', 'Beth', 'Dee-Dee', 'Earl']

注意:Cecil是彻底删除,列表长度也从5变为4

3、分片赋值

 View Code
列表方法:

方法是一个与某些对象有紧密联系的函数,对象可能是列表、数字,也可能是字符串或者其他类型的对象,方法的调用方式:对象.方法(参数)

1、append

append方法用于在列表末尾追加新的对象:

复制代码 代码如下:
> lst=[1,2,3]
> lst.append(4)
> lst
[1, 2, 3, 4]

2、cout

count方法用于统计某个元素在列表中出现的次数:

复制代码 代码如下:
> ['to','be','or','not','to','be'].count('to')
2
> x=[[1,2],1,1,[2,1,[1,2]]]
> x.count(1)
2
> x.count([1,2])
1

3、extend

extend方法可以在列表的末尾一次性的追加另一个序列中的多个值

复制代码 代码如下:
> a=[1,2,3]
> b=[4,5,6]
> a.extend(b)
> a
[1, 2, 3, 4, 5, 6]
> #区别连接操作
> a=[1,2,3]
> b=[4,5,6]
> a+b
[1, 2, 3, 4, 5, 6]
> a
[1, 2, 3]

4、index

index方法用于从列表中找出某一个匹配项的索引位置:

复制代码 代码如下:
> knights=['we','are','the','knigths','who','say','ni']
> knights.index('who')
4
> knights=['we','are','the','knigths','who','say','ni']
> knights.index('herring')

Traceback (most recent call last):
  File "<pyshell#184>", line 1, in <module>
    knights.index('herring')
ValueError: 'herring' is not in list

没有成功找到会引发异常

 5、insert

insert方法用于将对象插入到列表中:

复制代码 代码如下:
> numbers=[1,2,3,5,6,7]
> numbers.insert(3,'four')
> numbers
[1, 2, 3, 'four', 5, 6, 7]
> #extend方法一样,insert方法的操作也可以用分片赋值来实现
> numbers=[1,2,3,5,6,7]
> numbers[3:3]=['four']
> numbers
[1, 2, 3, 'four', 5, 6, 7]

6、pop

pop方法会移除列表中的一个元素(默认是最后一个),并且返回该元素的值:

复制代码 代码如下:
> x=[1,2,3]
> x.pop()
3
> x
[1, 2]
> x.pop(0)
1
> x
[2]

注意:pop方法是唯一一个既能修改列表又返回元素值(除了None)的列表方法

7、remove

remove方法用于移除列表中某个值的第一个匹配项:

复制代码 代码如下:
> x=['to','be','or','not','to','be']
> x.remove('be')
> x
['to', 'or', 'not', 'to', 'be']
> x.remove('bee')

Traceback (most recent call last):
  File "<pyshell#19>", line 1, in <module>
    x.remove('bee')
ValueError: list.remove(x): x not in list

8、reverse

reverse方法将列表中的元素反向存放,该方法也改变了列表但不返回值

复制代码 代码如下:
> x=[1,2,3]
> x.reverse()
> x
[3, 2, 1]
9、sort

sort方法用于在原位置对列表进行排序,改变原来的列表,从而让其中的元素按照一定的

复制代码 代码如下:
> x=[4,6,2,1,7,9]
> x.sort()
> x
[1, 2, 4, 6, 7, 9]

 元组
元组与列表一样,也是一种序列,唯一不同的是元组不可以修改:

任意对象的有序集合
通过偏移存储
属于不可变序列类型
固定长度、异构、任意嵌套
对象引用数组
使用逗号分隔了一些值,就自动创建了一个元组:

复制代码 代码如下:
> 1,2,3
(1, 2, 3)
> ()
()
> 42
42
> 42,
(42,)
> (42,)
(42,)

元组也是(大部分时候是)通过圆括号括起来的,空元组可以用没有包含内容的两个圆括号来表示:

tuple函数

tuple函数的功能和list函数基本上是一样的:以一个序列作为参数并把它转换为元组。

复制代码 代码如下:
> tuple([1,2,3])
(1, 2, 3)
> tuple('abc')
('a', 'b', 'c')
> tuple((1,2,3))
(1, 2, 3)

列表与元组的相互转化:

复制代码 代码如下:
> T=('cc','aa','dd','bb')
> tmp=list(T)
> tmp
['cc', 'aa', 'dd', 'bb']
> T=tuple(tmp)
> T
('cc', 'aa', 'dd', 'bb')

一句话新闻

一文看懂荣耀MagicBook Pro 16
荣耀猎人回归!七大亮点看懂不只是轻薄本,更是游戏本的MagicBook Pro 16.
人们对于笔记本电脑有一个固有印象:要么轻薄但性能一般,要么性能强劲但笨重臃肿。然而,今年荣耀新推出的MagicBook Pro 16刷新了人们的认知——发布会上,荣耀宣布猎人游戏本正式回归,称其继承了荣耀 HUNTER 基因,并自信地为其打出“轻薄本,更是游戏本”的口号。
众所周知,寻求轻薄本的用户普遍更看重便携性、外观造型、静谧性和打字办公等用机体验,而寻求游戏本的用户则普遍更看重硬件配置、性能释放等硬核指标。把两个看似难以相干的产品融合到一起,我们不禁对它产生了强烈的好奇:作为代表荣耀猎人游戏本的跨界新物种,它究竟做了哪些平衡以兼顾不同人群的各类需求呢?