目录
一、列表与元组
(一)列表
(二)操作列表
(三)元组
习题P502
习题P497
二、字符串
(一)字符串的基本操作
(二)字符串的常用方法
(三)格式化字符串
练习4-1
练习4-2
一、列表与元组
(一)列表
1. 创建列表
使用方括号
[]
来创建列表,元素之间用逗号分隔。
2. 访问列表元素
元素可以通过索引来访问,索引从0开始,也可以使用负索引,从列表末尾开始计数。
3. 切片操作
切片(Slicing)可以获取列表的一部分。语法为
list[start:stop:step]
4. 修改列表元素
由于列表是可变的,可以通过索引直接修改列表中的元素。
5. 添加元素
append()
方法:在列表末尾添加一个元素。
extend()
方法:将另一个可迭代对象(如列表、元组等)的元素添加到当前列表末尾。
insert()
方法:在指定索引位置插入一个元素。
6. 删除元素
del
语句:根据索引删除列表中的元素。
remove()
方法:根据元素值删除列表中的第一个匹配元素。
pop()
方法:删除并返回指定索引位置的元素(默认删除最后一个元素)。
7. 列表常用方法
len()
函数:返回列表的长度。
count()
方法:统计某个元素在列表中出现的次数。
index()
方法:返回某个元素在列表中第一次出现的索引。
sort()
方法:对列表进行排序(默认升序)。
reverse()
方法:反转列表中的元素。
8. 列表嵌套
列表可以包含其他列表,形成嵌套结构。
(二)操作列表
使用
+
运算符可以将两个或多个列表拼接成一个新列表。使用
*
运算符可以重复列表中的元素,生成一个新列表。使用
in
关键字可以判断一个元素是否在列表中,返回True
或False
。
列表推导式是一种简洁的语法,用于从现有列表创建新列表。
- 基本形式:
[expression for item in iterable]
numbers = [1, 2, 3, 4, 5] squares = [num ** 2 for num in numbers] print(squares) # 输出 [1, 4, 9, 16, 25]
- 带有条件的列表推导式:
[expression for item in iterable if condition]
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] even_squares = [num ** 2 for num in numbers if num % 2 == 0] print(even_squares) # 输出 [4, 16, 36, 64, 100]
遍历列表
使用
for
循环直接遍历元素fruits = ["apple", "banana", "cherry"] for fruit in fruits: print(fruit)
使用
for
循环和range()
函数遍历索引fruits = ["apple", "banana", "cherry"] for index in range(len(fruits)): print(fruits[index])
使用
enumerate()
函数同时获取索引和元素fruits = ["apple", "banana", "cherry"] for index, fruit in enumerate(fruits): print(f"{index}: {fruit}")
列表排序
使用
sort()
方法进行原地排序numbers = [3, 1, 4, 1, 5, 9, 2, 6] numbers.sort() print(numbers) # 输出 [1, 1, 2, 3, 4, 5, 6, 9] # 降序排序 numbers.sort(reverse=True) print(numbers) # 输出 [9, 6, 5, 4, 3, 2, 1, 1]
使用
sorted()
函数返回一个新的已排序列表numbers = [3, 1, 4, 1, 5, 9, 2, 6] sorted_numbers = sorted(numbers) print(sorted_numbers) # 输出 [1, 1, 2, 3, 4, 5, 6, 9] print(numbers) # 原始列表不变,输出 [3, 1, 4, 1, 5, 9, 2, 6]
max()
函数
min()
函数
sum()
函数
复制列表
浅拷贝:使用
list()
函数或切片操作[:]
进行浅拷贝。浅拷贝创建一个新列表,新列表中的元素是原列表元素的引用。
深拷贝:使用
copy
模块的deepcopy()
函数进行深拷贝。深拷贝会递归地复制列表中的所有元素,创建一个完全独立的新列表。
(三)元组
元组:与列表类似,是由一系列按额定顺序排序的元素组成
用()创建,或者用tuple()创建
List是可修改的序列,而元组是不可修改的,即创建后无法修改当前元组
习题P502
题目描述
小蓝给学生们组织了一场考试,卷面总分为 100 分,每个学生的得分都是一个 0 到 100 的整数。
如果得分至少是 60 分,则称为及格。如果得分至少为 85 分,则称为优秀。
请计算及格率和优秀率,用百分数表示,百分号前的部分四舍五入保留整 数。
输入描述
输入的第一行包含一个整数 n (1≤n≤10^4),表示考试人数。
接下来 n 行,每行包含一个 0 至 100 的整数,表示一个学生的得分。
输出描述
输出两行,每行一个百分数,分别表示及格率和优秀率。百分号前的部分四舍五入保留整数。
n = int(input()) scores = [int(input()) for _ in range(n)] pass_rate = round(sum(1 for score in scores if score >= 60) / n * 100) excellent_rate = round(sum(1 for score in scores if score >= 85) / n * 100) print(f"{pass_rate}%") print(f"{excellent_rate}%")
习题P497
题目描述
小蓝给学生们组织了一场考试,卷面总分为 100 分,每个学生的得分都是一个 0 到 100 的整数。
请计算这次考试的最高分、最低分和平均分。
输入描述
输入的第一行包含一个整数 n (1≤n≤10^4),表示考试人数。
接下来 n 行,每行包含一个 0 至 100 的整数,表示一个学生的得分。
输出描述
输出三行。
第一行包含一个整数,表示最高分。
第二行包含一个整数,表示最低分。
第三行包含一个实数,四舍五入保留正好两位小数,表示平均分。
n = int(input()) max_score = float('-inf') min_score = float('inf') total_score = 0 for _ in range(n): score = int(input()) if score > max_score: max_score = score if score < min_score: min_score = score total_score += score print(max_score) print(min_score) print("{:.2f}".format(total_score/n))
n = int(input()) nums = [int(input()) for _ in range(n)] print(max(nums), min(nums), f"{sum(nums) / n:.2f}", sep='\n')
二、字符串
在Python中,字符串是一种基本的数据类型,用于存储和操作文本数据。
(一)字符串的基本操作
拼接:使用
+
运算符可以拼接两个字符串。重复:使用
*
运算符可以重复字符串。索引:可以通过索引访问字符串中的单个字符。索引从0开始。
切片:通过切片可以获取字符串的子串。语法为
[start:stop:step]
。长度:使用
len()
函数可以获取字符串的长度。
(二)字符串的常用方法
查找
find():查找子串首次出现的位置,如果不存在返回 -1。
index()
:查找子串首次出现的位置,如果不存在抛出异常。替换:
replace()
方法用于替换字符串中的子串。分割:
split()
方法用于将字符串按指定的分隔符分割成列表。去除空白字符:
strip()
方法用于去除字符串两端的空白字符(包括空格、制表符、换行符等)。大小写转换
upper()
:将字符串转换为大写。
lower()
:将字符串转换为小写。
(三)格式化字符串
% 格式化
name = "Alice" age = 30 print("My name is %s and I'm %d years old." % (name, age)) # 输出: My name is Alice and I'm 30 years old.
format() 方法
name = "Bob" age = 25 print("My name is {} and I'm {} years old.".format(name, age)) # 输出: My name is Bob and I'm 25 years old.
f 字符串
name = "Charlie" age = 28 print(f"My name is {name} and I'm {age} years old.") # 输出: My name is Charlie and I'm 28 years old.
练习4-1
计算单词数、大写字母数目、小写字母数目
def count_characters_and_words(text): word_count = len(text.split()) upper_count = 0 lower_count = 0 for char in text: if char.isupper(): upper_count += 1 elif char.islower(): lower_count += 1 return word_count, upper_count, lower_count text = "Hello World! Python is Great." words, upper, lower = count_characters_and_words(text) print(f"单词数: {words}") print(f"大写字母数目: {upper}") print(f"小写字母数目: {lower}")
练习4-2
对一大段不规范的英文文本进行排版
每句话首字母大写,其余小写。
句子之间用一个空格分隔。
单词和单词之间有一个空格。
句子中的符号和前一个单词之间没有空格。
按照换行符划分段落,输出时每段空两个空格。
每行80个字符,单个单词超过80个字符时直接下一行输出该单词。
def format_text(text): paragraphs = text.split('\n\n') formatted_paragraphs = [] for paragraph in paragraphs: lines = [] current_line = "" sentences = paragraph.split('.') for sentence in sentences: if sentence.strip(): sentence = sentence.strip().capitalize() + '.' words = sentence.split() for word in words: if len(current_line) + len(word) + 1 > 80: lines.append(current_line.strip()) current_line = "" current_line += word + " " if current_line: lines.append(current_line.strip()) formatted_paragraph = " " + "\n".join(lines) formatted_paragraphs.append(formatted_paragraph) return "\n\n".join(formatted_paragraphs) # 示例文本 text = """ hello world. this is an example of a long text that needs to be formatted properly. we need to make sure that each sentence starts with a capital letter and ends with the correct punctuation. also, we need to ensure that there are no extra spaces between words and sentences. for instance, some sentences might have multiple spaces or no spaces at all between them. similarly, some words might be followed by symbols without any space in between. another issue is that some paragraphs might not be separated correctly. sometimes, there could be more than one newline character between paragraphs, or there might be no newline characters at all. finally, we need to make sure that each line of the formatted text does not exceed 80 characters. if a single word is longer than 80 characters, it should be moved to the next line. this is just an example of how unformatted text can look. in reality, the text could be much longer and more complex. """ formatted_text = format_text(text) print(formatted_text)