Python基础任务2

列表

Python内置的一种数据类型是列表list

标志

使用[]

基本操作(创建,append( ),pop( ) ,del( ), 拷贝)

创建

list是一种有序的集合,可以随时添加和删除其中的元素。

1
2
3
>>> classmates = ['Michael', 'Bob', 'Tracy']
>>> classmates
['Michael', 'Bob', 'Tracy']

变量classmates就是一个list。

可以用索引来访问list中每一个位置的元素,索引是从0开始的。

要取最后一个元素,除了计算索引位置外,还可以用-1做索引,直接获取最后一个元素 。

list是一个可变的有序表,所以,可以使用append()方法往list中追加元素到末尾:

1
2
3
>>> classmates.append('Adam')
>>> classmates
['Michael', 'Bob', 'Tracy', 'Adam']

也可以使用insert()方法把元素插入到指定的位置,比如索引号为1的位置:

1
2
3
>>> classmates.insert(1, 'Jack')
>>> classmates
['Michael', 'Jack', 'Bob', 'Tracy', 'Adam']

要删除list末尾的元素,用pop()方法:

1
2
3
4
>>> classmates.pop()
'Adam'
>>> classmates
['Michael', 'Jack', 'Bob', 'Tracy']

要删除指定位置的元素,用pop(i)方法,其中i是索引位置:

1
2
3
4
>>> classmates.pop(1)
'Jack'
>>> classmates
['Michael', 'Bob', 'Tracy']

还可以用remove('name')方法删除指定元素:

1
2
3
>>> classmates.remove('Bob')
>>> classmates
['Michael', 'Tracy']

要把某个元素替换成别的元素,可以直接赋值给对应的索引位置:

1
2
3
>>> classmates[1] = 'Sarah'
>>> classmates
['Michael', 'Sarah', 'Tracy']

拷贝

copy() 函数用于复制列表,类似于 classmates[:]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# 往列表中设置不同类型的值,观察两种拷贝方法的差异。
a = [2333, 'a', [0, 1, 2], {'a', 'b', 'c'}, {'name': 'python', 'age': 3}]
b = a
c = a.copy()

# 数值
del a[0]
'''
各变量值为:
a = ['a', [0, 1, 2], {'c', 'b', 'a'}, {'name': 'python', 'age': 3}]
b = ['a', [0, 1, 2], {'c', 'b', 'a'}, {'name': 'python', 'age': 3}]
c = [2333, 'a', [0, 1, 2], {'c', 'b', 'a'}, {'name': 'python', 'age': 3}]
'''

# 字符串
del a[0]
'''
各变量值为:
a = [[0, 1, 2], {'b', 'a', 'c'}, {'name': 'python', 'age': 3}]
b = [[0, 1, 2], {'b', 'a', 'c'}, {'name': 'python', 'age': 3}]
c = [2333, 'a', [0, 1, 2], {'b', 'a', 'c'}, {'name': 'python', 'age': 3}]
'''

# 列表
del a[0][0]
'''
各变量值为:
a = [[1, 2], {'c', 'a', 'b'}, {'name': 'python', 'age': 3}]
b = [[1, 2], {'c', 'a', 'b'}, {'name': 'python', 'age': 3}]
c = [2333, 'a', [1, 2], {'c', 'a', 'b'}, {'name': 'python', 'age': 3}]
'''

# 集合
a[1].remove('a')
'''
各变量值为:
a = [[1, 2], {'c', 'b'}, {'name': 'python', 'age': 3}]
b = [[1, 2], {'c', 'b'}, {'name': 'python', 'age': 3}]
c = [2333, 'a', [1, 2], {'c', 'b'}, {'name': 'python', 'age': 3}]
'''

# 字典
a[2]['age'] = 4
'''
各变量值为:
a = [[1, 2], {'c', 'b'}, {'name': 'python', 'age': 4}]
b = [[1, 2], {'c', 'b'}, {'name': 'python', 'age': 4}]
c = [2333, 'a', [1, 2], {'c', 'b'}, {'name': 'python', 'age': 4}]
'''

以上可以看出,使用 = 直接赋值,是引用赋值,a影响了b(可以试试改变b,观察a的变化)。
然而copy() 只是是浅拷贝,修改列表中的数值、字符串**不会互相影响,但是修改列表里面的集合、字典、列表,则会受到a的影响**。

排序和反转:

1
2
3
classmates.sort()       #正向排序
classmates.sort(reverse = True)  #反向排序
classmates.reverse()  #反转

列表相关方法

函数 作用
cmp(list1, list2) 比较两个列表的元素
len(list) 列表元素个数
max(list) 返回列表元素最大值
min(list) 返回列表元素最小值
list(seq) 将元组转换为列表

元组

另一种有序列表叫元组:tuple。

tuple和list非常类似,但是tuple一旦初始化就不能修改

标志

使用()

基本操作(创建及不可变性)

1
>>> classmates = ('Michael', 'Bob', 'Tracy')

它没有append(),insert()这样的方法,其他获取元素的方法和list是一样的,可以正常地使用classmates[0]classmates[-1],但不能赋值成另外的元素 。

定义一个tuple时,在定义的时候,tuple的元素就必须被确定下来 。

如果要定义一个空的tuple,可以写成()

1
2
3
>>> t = ()
>>> t
()

但是,要定义一个只有1个元素的tuple,如果这么定义:

1
2
3
>>> t = (1)
>>> t
1

定义的不是tuple,是1这个数!这是因为括号()既可以表示tuple,又可以表示数学公式中的小括号,这就产生了歧义,因此,Python规定,这种情况下,按小括号进行计算,计算结果自然是1

所以,只有1个元素的tuple定义时必须加一个逗号,,来消除歧义:

1
2
3
>>> t = (1,)
>>> t
(1,)

Python在显示只有1个元素的tuple时,也会加一个逗号,,以免误解成数学计算意义上的括号。

tuple的每个元素,指向永远不变。即指向'a',就不能改成指向'b',指向一个list,就不能改成指向其他对象,但指向的这个list本身是可变的

元组相关方法

函数 作用
cmp(tuple1, tuple2) 比较两个元组的元素
len(tuple) 列表元组元素个数
max(tuple) 返回元组元素最大值
min(tuple) 返回元组元素最小值
tuple(seq) 将列表转换为元组

string字符串

定义及基本操作(+,*,读取方式)

创建

字符串是 Python 中最常用的数据类型。可以使用引号(‘或”)来创建字符串。
创建字符串只要为变量分配一个值即可。例如:

1
2
3
>>> s = 'Hello World!'
>>> s
'Hello World!'

访问字符串中的值

Python不支持单字符类型,单字符在 Python 中也是作为一个字符串使用。

Python访问子字符串,可以使用方括号来截取字符串,如下实例:

1
2
3
4
5
>>> var = 'Hello World!'
>>> print("var[0]: ", var[0])
var[0]: H
>>> print("var[1:5]: ", var[1:5])
var[1:5]: ello

字符串更新

对已存在的字符串进行修改,并赋值给另一个变量,如下实例:

1
2
3
>>> var = 'Hello World!'
>>> print("更新字符串 :- ", var[:6] + 'Skye!')
更新字符串 :- Hello Skye!

转义字符

在需要在字符中使用特殊字符时,python用反斜杠()转义字符。如下表:

转义字符 描述
(在行尾时) 续行符
\\ 反斜杠符号
\’ 单引号
\” 双引号
\a 响铃
\b 退格(Backspace)
\e 转义
\000
\n 换行
\v 纵向制表符
\t 横向制表符
\r 回车
\f 换页
\oyy 八进制数,yy代表的字符,例如:\o12代表换行
\xyy 十六进制数,yy代表的字符,例如:\x0a代表换行
\other 其它的字符以普通格式输出

字符串运算符

下表实例变量 a 值为字符串 “Hello”,b 变量值为 “Python”:

操作符 描述 实例
+ 字符串连接 >>>a + b
‘HelloPython’
* 重复输出字符串 >>>a * 2
‘HelloHello’
[] 通过索引获取字符串中字符 >>>a[1]
‘e’
[ : ] 截取字符串中的一部分 >>>a[1:4]
‘ell’
in 成员运算符 - 如果字符串中包含给定的字符返回 True >>>”H” in a
True
not in 成员运算符 - 如果字符串中不包含给定的字符返回 True >>>”M” not in a
True
r/R 原始字符串 - 原始字符串:所有的字符串都是直接按照字面的意思来使用,没有转义特殊或不能打印的字符。 原始字符串除在字符串的第一个引号前加上字母”r”(可以大小写)以外,与普通字符串有着几乎完全相同的语法。 >>>print(r’\n’)
\n
>>> print (R’\n’)
\n
% 格式字符串 见下文

字符串相关方法

方法 描述
string.capitalize() 把字符串的第一个字符大写
string.count(str, beg=0, end=len(string)) 返回 str 在 string 里面出现的次数,如果 beg 或者 end 指定则返回指定范围内 str 出现的次数
string.find(str, beg=0, end=len(string)) 检测 str 是否包含在 string 中,如果 beg 和 end 指定范围,则检查是否包含在指定范围内,如果是返回开始的索引值,否则返回-1
string.index(str, beg=0, end=len(string)) 跟find()方法一样,只不过如果str不在 string中会报一个异常.
string.decode(encoding=’UTF-8’, errors=’strict’) 以 encoding 指定的编码格式解码 string,如果出错默认报一个 ValueError 的 异 常 , 除非 errors 指 定 的 是 ‘ignore’ 或 者’replace’
string.encode(encoding=’UTF-8’, errors=’strict’) 以 encoding 指定的编码格式编码 string,如果出错默认报一个ValueError 的异常,除非 errors 指定的是’ignore’或者’replace’
string.startswith(obj, beg=0,end=len(string)) 检查字符串是否以 obj 开头,是则返回 True,否则返回 False。如果beg 和 end 指定值,则在指定范围内检查.
string.endswith(obj, beg=0, end=len(string)) 检查字符串是否以 obj 结束,如果beg 或者 end 指定则检查指定的范围内是否以 obj 结束,如果是,返回 True,否则返回 False.
string.expandtabs(tabsize=8) 把字符串 string 中的tab 符号转为空格,tab 符号默认的空格数是 8。
string.format() 格式化字符串
string.isalnum() 如果 string 至少有一个字符并且所有字符都是字母或数字则返回 True,否则返回 False
string.isalpha() 如果 string 至少有一个字符并且所有字符都是字母则返回 True,否则返回 False
string.isdecimal() 如果 string 只包含十进制数字则返回 True 否则返回 False.
string.isdigit() 如果 string 只包含数字则返回 True 否则返回 False.
string.isnumeric() 如果 string 中只包含数字字符,则返回 True,否则返回 False
string.isspace() 如果 string 中只包含空格,则返回 True,否则返回 False.
string.isupper() 如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,则返回 True,否则返回 False
string.islower() 如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写,则返回 True,否则返回 False
string.lower() 转换 string 中所有大写字符为小写.
string.upper() 转换 string 中所有小写字母为大写.
string.swapcase() 翻转 string 中的大小写
max(str) 返回字符串 str最大的字母
min(str) 返回字符串 str最小的字母
string.replace(str1, str2, num=string.count(str1)) 把 string 中的 str1 替换成 str2,如果 num 指定,则替换不超过 num 次.
string.lstrip() 删除 string 字符串左边的空格.
string.rstrip() 删除 string 字符串末尾的空格.
string.strip([obj]) 在 string 上执行 lstrip()和 rstrip()
string.split(str=””, num=string.count(str)) str 为分隔符切片 string,如果 num 有指定值,则仅分隔 num+ 个子字符串
string.splitlines([keepends]) 按照行(‘\r’, ‘\r\n’, \n’)分隔,返回一个包含各行作为元素的列表,如果参数 keepends 为 False,不包含换行符,如果为 True,则保留换行符。

字符串格式化问题

Python 支持格式化字符串的输出 。尽管这样可能会用到非常复杂的表达式,但最基本的用法是将一个值插入到一个有字符串格式符 %s 的字符串中。

在 Python 中,字符串格式化使用与 C 中 sprintf 函数一样的语法。

如下实例:

1
2
>>> print "My name is %s and age is %d!" % ('Skye', 25) 
My name is Skye and age is 25!

python字符串格式化符号:

符 号 描述
%s 格式化字符串
%d 格式化整数
%u 格式化无符号整型
%o 格式化无符号八进制数
%x 格式化无符号十六进制数
%X 格式化无符号十六进制数(大写)
%f 格式化浮点数字,可指定小数点后的精度
%e 用科学计数法格式化浮点数
%E 作用同%e,用科学计数法格式化浮点数
%g %f和%e的简写
%G %f 和 %E 的简写
%p 用十六进制数格式化变量的地址

Python2.6 开始,新增了一种格式化字符串的函数 str.format(),它增强了字符串格式化的功能。
基本语法是通过{}:来代替以前的%

format 函数可以接受不限个参数,位置可以不按顺序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
>>>"{} {}".format("hello", "world")    # 不设置指定位置,按默认顺序
'hello world'
>>> "{0} {1}".format("hello", "world") # 设置指定位置
'hello world'
>>> "{1} {0} {1}".format("hello", "world") # 设置指定位置
'world hello world'
>>>
>>> print("网站名:{name}, 地址 {url}".format(name="菜鸟教程", url="www.runoob.com"))
网站名:菜鸟教程, 地址 www.runoob.com
>>> # 通过字典设置参数
>>> site = {"name": "菜鸟教程", "url": "www.runoob.com"}
>>> print("网站名:{name}, 地址 {url}".format(**site))
网站名:菜鸟教程, 地址 www.runoob.com
>>> # 通过列表索引设置参数
>>> my_list = ['菜鸟教程', 'www.runoob.com']
>>> print("网站名:{0[0]}, 地址 {0[1]}".format(my_list)) # "0" 是必须的
网站名:菜鸟教程, 地址 www.runoob.com

数字格式化
下表展示了 str.format() 格式化数字的多种方法:

1
2
>>> print("{:.2f}".format(3.1415926));
3.14
数字 格式 输出 描述
3.1415926 {:.2f} 3.14 保留小数点后两位
3.1415926 {:+.2f} +3.14 带符号保留小数点后两位
-1 {:+.2f} -1.00 带符号保留小数点后两位
2.71828 {:.0f} 3 不带小数
5 {:0>2d} 05 数字补零 (填充左边, 宽度为2)
5 {:x<4d} 5xxx 数字补x (填充右边, 宽度为4)
10 {:x<4d} 10xx 数字补x (填充右边, 宽度为4)
1000000 {:,} 1,000,000 以逗号分隔的数字格式
0.25 {:.2%} 25.00% 百分比格式
1000000000 {:.2e} 1.00e+09 指数记法
13 {:10d} 13 右对齐 (默认, 宽度为10)
13 {:<10d} 13 左对齐 (宽度为10)
13 {:^10d} 13 中间对齐 (宽度为10)
11 ‘{:b}’.format(11)
‘{:d}’.format(11)
‘{:o}’.format(11)
‘{:x}’.format(11)
‘{:#x}’.format(11)
‘{:#X}’.format(11)
1011
11
13
b
0xb
0XB
进制

^, <, > 分别是居中、左对齐、右对齐,后面带宽度, : 号后面带填充的字符,只能是一个字符,不指定则默认是用空格填充。+ 表示在正数前显示 +,负数前显示 -; (空格)表示在正数前加空格。b、d、o、x 分别是二进制、十进制、八进制、十六进制。

-------------本文结束感谢您的阅读-------------
您的支持将是我前进的动力!