3,通用的序列操作
python的学习3
今天的学习又开始了。
本文按照《python基础教程》(第三版)顺序进行学习
本文写作时开发环境:windows系统,python3.8 32-bit
列表和元组
列表和元组都是python内置的多种序列之一,其区别是:列表可以修改,元组不可以。
列表
列表的表示:所有元素都放在方括号内,用逗号隔开
>>> edward = ['Edward Gumby',42]
>>> john = ['John Smith',50]
>>> database = [edward,john]
>>> database
[['Edward Gumby'42],['John Smith'50]]
字符串
以后探讨
通用的序列操作
索引
- 编号:一个序列中所有元素都有编号,从左往右第一个元素编号为0,然后是1,2,3。从右往左第一个元素编号为-1,然后是-2,-3.
注:对于字符串字面量(以及其他的序列字面量),可直接对其执行索引操作,无需先将其赋给
变量。这与先赋给变量再对变量执行索引操作的效果是一样的。
即:
>>> 'hello'[1]
'e'
与
>>> a = 'hello'
>>> a[1]
'e'
所以,如果函数返回一个序列,你就可以直接对这个序列进行索引操作:获取用户输入的年份的最后一位
>>> fourth = input('year:')[-1]
year:2003
>>> fourth
'3'
- 索引操作示例
#将以数指定的年、月、日的日期打印出来
months = ['January','February','March','April','May','June','July','August','September','October','November','December']
#一个列表,其中包涵数1-31对应的结尾
endings = ['st','nd','rd'] + 17*['th']\
+ ['st','nd','rd'] + 7*['th']\
+ ['th']
year = input('Year: ')
month = input('Month(1-12): ')
day = input('Day(1-31): ')
month_number = int(month)
day_number = int(day)
#别忘了将表示月和日的数减一,这样才能得到正确的索引
month_name = months[month_number-1]
ordinal = day + endings[day_number-1]
print(month_name + ' '+ ordinal + ',' + year)
input('退出请按回车:')
切片
用来访问特定范围内的元素
使用两个索引,并用冒号分隔
>>> tag = '<a href="http://www.python.org">Python web site</a>'
>>> tag[9:30]
'http://www.python.org'
>>> tag[32:-4]
'Python web site'
- 切片适用于提取序列的一部分,其中的编号很重要
- 中括号中第一个索引是指包含的第一个元素的编号
- 中括号中第二个索引是指切片后余下的第一个元素的编号
>>> number = [1,2,3,4,5,6,7,8,9,10]
>>> number[3:6]
[4,5,6]
>>> number[0:1]
[1]
即:通过提供的两个索引来指定切片的边界,其中第一个索引指定的元素包含在切片内,但第二个索引指定的元素不包含在切片内
切片中的简写
- 如果切片结束于序列结尾,可省略第二个索引
number[3:] - 如果切片开始于序列开头,可省略第一个索引
number[:6] - 如果要复制整个序列,可以将两个索引都省略
number[:]
注:如果编号再进一步,可能出现
>>> number[-3:0]
[]
执行切片操作时,如果第一个索引指定的元素位于第二个索
引指定的元素后面(在这里,倒数第3个元素位于第1个元素后面),结果就为空序列.
切片示例:
#提取手机尾号
shoujihao = input('请输入手机号: ')
print('手机尾号:' + shoujihao[-4:])
切片的步长
在切片时,我们忽略了一个参数:切片的步长
通常的,在执行切片中,步长的默认值为1
步长的默认为1,不能为0,但是可以为负数。
>>> numbers = [1,2,3,4,5,6,7,8,9,10]
>>> numbers[1:5:2]
[2,4]
>>> numbers = [1,2,3,4,5,6,7,8,9,10]
>>> numbers[10:0:-2]
[10,8,6,4,2]
相加
可以用加法运算符对序列进行拼接
>>> [1,2,3] + [4,5,6,7]
[1,2,3,4,5,6,7]
>>> 'hello' + ',world'
'hello,world'
但是
>>> 'hello' + [1,2,3]
Traceback (most recent call last):
File "<pyshell#0>", line 1, in <module>
'hello' + [1,2,3]
TypeError: can only concatenate str (not "list") to str
由上述错误可知,不能拼接不同的序列
相乘
当一个序列和一个数x相乘时,将会重复这个序列x次来构成一个新序列。
>>> 'python'*4
'pythonpythonpythonpython'
>>> 7*[42]
[42, 42, 42, 42, 42, 42, 42]
空列表
-
空列表使用
[]表示。 -
如果要创建一个包涵十个元素的列表,但是没有任何有用的内容,可以使用
[0]*10这将创建一个包含十个零的列表。
-
如果想要表示列表中什么都没有,可以使用None.
在Python中,None表示什么都没有。(区分大小写)
所以可以:
>>> sequence = [None]*10 >>> sequence [None, None, None, None, None, None, None, None, None, None]
乘法运算示例:
#在位于屏幕中间且宽度合适的方框内打印一个句子
sentence = input('sentence: ')
screen_width = 80
text_width = len(sentence)
box_width = text_width + 6
left_margin = (screen_width - box_width)//2
print()
print(' ' * left_margin + '+' + '-'*(box_width-2) + '+')
print(' ' * left_margin + '| ' + ' '*(text_width+2)+ ' |')
print(' ' * left_margin + '| '+ sentence +' |')
print(' ' * left_margin + '| ' + ' '*(text_width+2)+ ' |')
print(' ' * left_margin + '+' + '-'*(box_width-2) + '+')
print()
#此程序对中文无法正确排版
#sentence:序列 ,sceen:屏幕 ,width:宽度 ,text:文本 ,box:箱
#left:左边 ,margin:边缘
成员资格检查
简单来说,就是指检查元素是否包含在序列中。
- 一般使用运算符
in - 它的作用是检查是否满足指定的条件,并返回相应的值
- 满足时返回True
- 不满足时返回False
Ps:像in这样的运算符称为布尔运算符,而前述真值称为布尔值。
>>> permissions = 'pw'
>>> 'w' in permissions
True
>>> 'x' in permissions
False
这两个示例使用成员资格测试分别检查'w'和'x'是否包含在字符串变量permissions中。在UNIX系统中,可在脚本中使用这两行代码来检查对文件的写入和执行权限。
>>> users = ['mlh','foo','bar']
>>> input('Enter your user name: ') in users
Enter your user name: mlh
True
这个示例检查提供的用户名mlh是否包含在用户列表中,这在程序需要执行特定的安全策略时很有用(在这种情况下,可能还需检查密码)。
>>> subject = '$$$ Get rich now!!! $$$'
'$$$' in subject
True
最后一个示例检查字符串变量subject是否包含字符串'$$$',这
可用于垃圾邮件过滤器中。
序列成员资格示例:
#检查用户名和PIN码
database = [
['abc','1234'],
['smith','4224'],
['jones','9843'],
['albert','7895']
]
username = input('User name: ')
pin = input('Pin: ')
if [username,pin] in database:
print('Access granted')
上述代码可用来从用户那里获取一个用户名和一个PIN码,并检查它们组成的列表是否包含在数据库(实际上也是一个列表)中。
也可以将其变的更加复杂,比如分别检测用户名和密码,在输入错误信息时返回对应信息。或者其他更复杂的地方。
其他
容器
容器是python支持的一种数据结构的基本概念。
指的是可包含其他对象的对象,两种主要的容器是序列(如列表和元组)和映射(如字典)。
- 在序列中,每个元素都有编号
- 在映射中,每个元素都有名称(也叫键)
还有一种既不是序列也不是映射的容器,他就是集合
内置函数len,max,min
长度
函数len返回序列包含的元素个数。
>>> numbers = [1,2,3,4,5,6,7,8,9,10]
>>> len(numbers)
10
最大值和最小值
max和min分别返回序列中最大和最小的元素
>>> numbers = [1,2,3,4,5,6,7,8,9,10]
>>> max(numbers)
10
>>> min(numbers)
1
>>> max(2,3,5)
5
>>> min(5,8,1)
1
最后,今天的学习结束。
浙公网安备 33010602011771号