列表元组字符串

python学习

1. 列表都可以存放一些什么东西?

我们说 Python 的列表是一个打了激素的数组,如果把数组比喻成集装箱,那么 Python 的列表就是一个大仓库,Ta 可以存放我们已经学习过的任何数据类型。

1
mix = [1, ‘小’, 3.14, [1, 2, 3]]

2. 向列表增加元素有哪些方法?

append(),extend(),insert()

extend()和append()都是向列表末端添加元素,区别在于:

append是将参数作为一个元素添加到列表的末尾

extend是将参数作为一个列表去扩展列表的末尾

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
name = ['F', 'i', 's', 'h']
name.append('C')
name
['F', 'i', 's', 'h', 'C']
name.extend(['.', 'c'])
name
['F', 'i', 's', 'h', 'C', '.', 'c']
name.append(['o', 'm'])
name
['F', 'i', 's', 'h', 'C', '.', 'c', ['o', 'm']]


insert():有两个参数,第一个参数是插入的位置,第二个参数是插入的元素

member = ['小甲鱼', '小布丁', '小宝贝']

\>>> member.insert(1, '厉害')

\>>> menber

['小甲鱼', '厉害', '小布丁', '小宝贝']



### 3.for循环的应用

```python

member = ['小甲鱼', 88, '黑夜', 90, '迷途', 85, '怡静', 90, '秋舞斜阳', 88]

for each in member:

print(each)

4. 下边的列表分片操作会打印什么内容?

1
2
3
list1 = [1, 3, 2, 9, 7, 8]

list1[2:5]

左闭右开 应该是[2,9,7]

5. 请问 list1[0] 和 list1[0:1] 一样吗?

不一样,list1[0] 返回第0个元素的值,list1[0:1] 返回一个只含有第0个元素的列表。

6.如果你每次想从列表的末尾取出一个元素,并将这个元素插入到列表的最前边,你会怎么做?

1
list1.insert(0,list1.pop())

7. 在进行分片的时候,我们知道分片的开始和结束位置需要进行指定,但其实还有另外一个隐藏的设置:步长。

在普通的分片操作中,步长默认设置为1,表示逐个遍历元素。其实我们可以人为调整步长以达到不可告人的秘密。

1
2
3
list1 = [1, 3, 2, 9, 7, 8]
list1[0:6:2]
[1, 2, 7]

之前提到的“简洁”分片操作在这里有效:

1
2
3
list1[::2]

[1, 2, 7]

步长可以是负数,改变方向(从尾部开始向左走):

1
2
list1[::-2]
[8, 9, 3]

8. 可以利用分片完成列表的拷贝 list2 = list1[:],那事实上可不可以直接写成 list2 = list1 更加简洁呢?

千万不可以!

1
2
3
4
5
6
7
>>> list1 = [1, 3, 2, 9, 7, 8]
>>> list2 = list1[:]
>>> list2
[1, 3, 2, 9, 7, 8]
>>> list3 = list1
>>> list3
[1, 3, 2, 9, 7, 8]

如果对list1进行排序,list1变为[1,2,3,7,8,9]

list2不变,而输出list3会发现,它也被排序了

image-20250909084404231

9.列表还有两个内置方法没给大家介绍,不过聪明的你应该可以自己摸索使用的门道吧:copy() 和 clear()

copy() 方法跟使用切片拷贝是一样的:

1
2
3
4
5
6
7
8
9
10
11
12
>>> list2 = list1.copy()
>>> list2
>>> [1, [1, 2, ['小甲鱼']], 3, 5, 8, 13, 18]

**clear() 方法用于清空列表的元素,但要注意,清空完后列表仍然还在哦,只是变成一个空列表。**
list2.clear()
list2
[]


### 10.列表推导式/列表解析

[i*i for i in range(10)]
输出 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

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
50
51
52
53
54

### 11.补充列表的一些内置函数BIF

list.count(a):列表list中元素a出现的次数;

list.index(a):列表list中元素a第一次出现的索引号

list.index(a,b,c):列表list中元素a在索引范围[b,c]中第一次出现的索引号

list.reverse():翻转list

list.sort():排序,默认从小到大排序

list.sort(reverse=True):从大到小排序

### 12.元组和列表的最大区别是什么?

元组不可修改,而列表可以修改。所以要求数据不能修改时使用元组,频繁要求修改数据时使用列表

当然格式也有区别

元组是()括号

列表是[]

### 13.元组可以使用的方法有哪些

count():计算并返回指定函数的数量

index():寻找并返回参数的索引值

### 13.创建一个元组,什么情况下逗号和小括号必须同时存在,缺一不可?

在拼接只有一个元素的元组的时候,例如我们课上举的例题:

>>> temp = (‘小甲鱼’, ‘黑夜’, ‘迷途’, ‘小布丁’)
###### 如果我想在“黑夜”和“迷途”之间插入“怡静”,我们应该:
>>> temp = temp[:2] + (‘怡静’,) + temp[2:]





### 14.x, y, z = 1, 2, 3 请问x, y, z是元组吗?

**<u>所有的多对象的、逗号分隔的、没有明确用符号定义的这些集合默认的类型都是元组</u>**,自己在IDLE中键入以下代码,并体会一下:

>>> ```python
>>> x, y, z = 1, 2, 3
>>> type(x)
>>> <class 'int'>
>>> h = x, y, z
>>> type(h)
>>> <class 'tuple'>

15.file1 = open(‘C:\windows\temp\readme.txt’, ‘r’) 表示以只读方式打开“C:\windows\temp\readme.txt”这个文本文件,但事实上这个语句会报错,知道为什么吗?你会如何修改?

会报错是因为在字符串中,我们约定“\t”和“\r”分别表示“横向制表符(TAB)”和“回车符”(详见:http://bbs.fishc.com/thread-92997-1-1.html),因此并不会按照我们计划的路径去打开文件。

Python 为我们铺好了解决的道路,只需要使用原始字符串操作符(R或r)即可:

file1 = open(r’C:\windows\temp\readme.txt’, ‘r’)

16.写一个检查密码安全性的代码

image-20250909095256638

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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
symbols = r'''`!@#$%^&*()_+-=/*{}[]\|'";:/?,.<>'''
chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
nums = '0123456789'

passwd = input('请输入需要检查的密码组合:')

# 判断长度

length = len(passwd)

while (passwd.isspace() or length == 0) :
passwd = input("您输入的密码为空(或空格),请重新输入:")
length = len(passwd)

if length <= 8:
flag_len = 1
elif 8 < length < 16:
flag_len = 2
else:
flag_len = 3

flag_con = 0

# 判断是否包含特殊字符

for each in passwd:
if each in symbols:
flag_con += 1
break


# 判断是否包含字母

for each in passwd:
if each in chars:
flag_con += 1
break

# 判断是否包含数字

for each in passwd:
if each in nums:
flag_con += 1
break

# 打印结果

while 1 :
print("您的密码安全级别评定为:", end='')
if flag_len == 1 or flag_con == 1 :
print("低")
elif flag_len == 3 and flag_con == 3 and (passwd[0] in chars):
print("高")
print("请继续保持")
break
else:
print("中")

print("请按以下方式提升您的密码安全级别:\n\
\t1. 密码必须由数字、字母及特殊字符三种组合\n\
\t2. 密码只能由字母开头\n\
\t3. 密码长度不能低于16位")
break




17.字符串常用方法

capitalize() 把字符串的第一个字母修改为大写
casefold() 把整个字符串的内容转为小写
center(width) 把字符串居中并用空格填充至长度width的新字符串
count(sub,start,end) 统计字符串sub在索引start到end(不包括end)中出现了几次
find(sub,start,end) 检查sub字符串是否被包含,有则返回索引值,否则返回-1
index(sub,start,end) 和find方法一致,但是如果sub不在指定字符串中会返回异常
isalnum() 如果字符串至少有一个字符且字符都是数字或字母则返回True,否则返回false
isalpha() 如果字符串至少有一个字符且字符都是字母则返回True,否则返回false
isdigit() 如果字符串中只包含数字则返回true,否则false
isdemical() 十进制数
islower() 如果字符串中至少包含一个区分大小写的字符,并且这些字符都是小写,则返回 True,否则返回 False。
isupper() 如果字符串中至少包含一个区分大小写的字符,并且这些字符都是大写,则返回 True,否则返回 False。
join(sub) 以字符串作为分隔符,插入到sub的所有字符间
ljuest(width) 返回一个左对齐的字符串,并使用空格填充
lower() 把大写字符转为小写
lstrip() 去掉字符串左边所有空格
replace(“old”,”new”,count) 把字符串中的 old 子字符串替换成 new 子字符串,如果 count 指定,则替换不超过 count 次。
translate(table) 根据 table 的规则(可以由 str.maketrans(‘a’, ‘b’) 定制)转换字符串中的字符。
zfill(width) 返回长度为 width 的字符串,原字符串右对齐,前边用 0 填充。
strip(chars) 删除字符串前边和后边所有的空格,chars 参数可以定制删除的字符,可选。
swapcase() 翻转大小写