第二章 列表和元组

目录

 

2.1序列概述

2.2通用的列表操作

2.2.1索引

2.2.2切片

2.2.3序列相加

2.2.4乘法

2.2.5成员资格

2.3列表:Python的主力

2.3.1函数list

2.3.2基本的列表操作

1.修改列表:给元素赋值

2.删除元素

3.给切片赋值

2.3.3列表方法

1.append

2.clear

3.copy

4.count

5.extend

6.index

7.insert

8.pop

9.remove

10.reverse

11.sort

2.4元组:不可修改的列表


2.1序列概述

序列是一种数据结构,其中的元素带编号(从0开始)。列表,字符串,元组都属于序列,其中列表可变,元组和字符串不可变。

Python支持一种数据结构的基本概念,叫容器。容器基本上就是可包含其他对象的对象,序列和映射(如字典)都是容器。这也就是为什么下面的代码是合理的(而且很方便)。

database = [
    ['a', '123'],
    ['b', '456'],
    ['c', '789']
]#列表里面嵌套列表

2.2通用的列表操作

2.2.1索引

序列中的所有元素都有编号,从0开始。可以使用编号来访问各个元素。特别的,Python可以直接使用负数编号,表示从右往左数

>>> gretting = 'hello'
>>> gretting[0]
'h'
#负数索引
>>> gretting[-1]
'o'
#字符串可以直接使用索引
>>> 'hello'[1]
'e'

代码清单2-1

#将以数指定的年,月,日打印出来
months = [
    'January',
    'February',
    'March',
    'April',
    'May',
    'June',
    'July',
    'August',
    'September',
    'October',
    'November',
    'December']

#一个列表,其中包含1-31对应的日期结尾
ending = ['st','nd','rd'] + 17*['th'] + ['st','nd','rd'] + 7*['th'] + ['st']

year = input('Year:')
month = input('Month:')
day = input('Day:')

month_number = int(month)
day_number = int(day)

month_name = months[month_number-1]
ordinal = day + ending[day_number-1]

print(month_name + " " + ordinal + "," + year)
#运行结果举例:
#Year:1974
#Month:8
#Day:16
#August 16th,1974

2.2.2切片

可以使用切片来访问特定范围内的元素。第一个索引是包含的第一个元素编号,第二个索引是切片后余下的第一个元素编号,第三个编号是步长。三个索引都可以(部分或全部)省略,索引之间以冒号分开。三个索引都可以使用负数。

关于前两个索引,可以理解为“含前不含后”,第三个索引为步长,如果指定的步长大于1,将跳过一些元素取值(如步长是2,将隔一个元素取值),当然,步长不能为0。

>>> num = [1,2,3,4,5,6,7,8,9]
>>> num[0:3]
[1, 2, 3]
>>> num[2:]
[3, 4, 5, 6, 7, 8, 9]
>>> num[:5]
[1, 2, 3, 4, 5]
>>> num[-3:-1]
[7, 8]
>>> num[0:5:2]
[1, 3, 5]

代码清单2-2 

#从类似于http://www.xxxxxx.com中提取域名

url = input('请输入网址')
print("域名是" + url[11:-4])

#结果举例
#请输入网址http://www.baidu.com
#域名是baidu

2.2.3序列相加

可以使用假发运算符来拼接序列,一般,不能拼接不同类型的序列。

>>> [1,2,3]+[4,3]
[1, 2, 3, 4, 3]

2.2.4乘法

将序列与数x相乘时,将重复这个序列的x次来创建一个新序列。

>>> 'pthon'*4
'pthonpthonpthonpthon'

代码清单2-3

#将输入的句子显示在屏幕中央
sentence = input('输入句子')

screen_width = 80
text_width = len(sentence)
box_width = text_width + 6
left_margin = (screen_width - box_width) // 2

print(left_margin*' ' + '+'   + (box_width - 2)*'-' + '+')
print(left_margin*' ' + '|  ' +    text_width*' '   + '  |')
print(left_margin*' ' + '|  ' +     sentence        + '  |')
print(left_margin*' ' + '|  ' +    text_width*' '   + '  |')
print(left_margin*' ' + '+'   + (box_width - 2)*'-' + '+')

2.2.5成员资格

要检查特定的值是否包含在序列中,可以使用运算符in。返回True/False

>>> permission = 'rw'
>>> 'w' in permission
True
>>> emmmm = '%%% emmmm @@@'
>>> '%%%' in emmmm
True

代码清单2-4

#检车用户名和PIN
database = [
    ['a', '123'],
    ['b', '456'],
    ['c', '789']
    ]

user_name = input('name:')
pin = input('PIN:')

if [user_name,pin] in database:
    print("access granted")

#name:a
#PIN:123
#access granted

内置函数len,min,max,分别返回序列的元素个数,最小值,最大值。

2.3列表:Python的主力

2.3.1函数list

list()可以将任何序列转换成列表

>>> list('hell0')
['h', 'e', 'l', 'l', '0']

2.3.2基本的列表操作

1.修改列表:给元素赋值

2.删除元素

>>> name = ['aa', 'bb', 'cc']
>>> del name[1]#使用del语句删除元素
>>> name
['aa', 'cc']

3.给切片赋值

通过切片赋值,可以将切片替换为与其长度不同的序列,甚至可以插入新元素,或者删除已有元素,也可以指定步长来赋值。

>>> name = ['aa', 'bb', 'cc']

>>> name[1:]=['dd','ee','ff']
>>> name
['aa', 'dd', 'ee', 'ff']

>>> name[2:2]=['gg']
>>> name
['aa', 'dd', 'gg', 'ee', 'ff']

>>> name[2:5:2]=['hh','ii']
>>> name
['aa', 'dd', 'hh', 'ee', 'ii']

2.3.3列表方法

调用形式:object.method(arguments)

1.append

用于将一个对象加到列表末尾(直接修改原列表)

2.clear

就地清空列表的内容

>>> lst = [1,2,3]
>>> lst.append(5)
>>> lst
[1, 2, 3, 5]

>>> lst.clear()
>>> lst
[]

3.copy

复制列表,常规复制只是将另一个名词关联到列表(相当于新建一个指针指向列表),而copy则相当于再建一个相同的列表。

#常规复制,a中的值也会跟着变
>>> a = [1,2,3]
>>> b = a
>>> b[1] = 6
>>> a
[1, 6, 3]

#使用copy
>>> b = a.copy()
>>> b[1] = 9
>>> a
[1, 6, 3]

4.count

计算指定元素出现的次数

5.extend

同时将多个值附加到列表末尾

6.index

在列表中查找指定值第一次出现的索引

7.insert

用于将一个对象插入列表

8.pop

从列表中删除一个元素,默认为最后一个元素,并返回这个元素。

9.remove

删除第一个为指定值的元素

10.reverse

反序排序

11.sort

正序排序(对原有列表直接修改),而函数sorted获取排序后的副本(原来的列表还留着).x=[1,4,2]  y=sorted(x)

sort还可以传入两个参数,这里比较复杂,用到再说。

2.4元组:不可修改的列表

元组一般使用圆括号,但也可以直接用逗号隔开。

tuple函数和list很像 ,tuple可将序列转换为元组。

元组可以用于字典的键,有些内置函数返回的也是元组。

猜你喜欢

转载自blog.csdn.net/qq_41024819/article/details/81673070
今日推荐