蓝桥杯python语言基础(4)——基础数据结构(上)

目录

一、列表与元组

(一)列表

(二)操作列表 

(三)元组

 习题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)

    本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/960860.html

    如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

    相关文章

    langchain基础(三)

    Chain&#xff1a; 关于三个invoke&#xff1a; 提示模板、聊天模型和输出解析器都实现了langchain的runnable接口&#xff0c; 都具有invoke方法&#xff08;因为invoke方法是Runnable的通用调用方法&#xff09; 所以可以一次性调用多次invoke直接得到最终结果&#xff1a;…

    数据分析和AI丨应对AI实施挑战,工程领域AI应用的五大方法

    工程领域的人工智能 &#xff08;AI&#xff09; 已经开始发挥价值&#xff0c;低代码和无代码工具正在使曾经仅属于专业数据科学家的 AI 能力变得大众化。 然而&#xff0c;并非工程领域的每个人都能从中受益&#xff0c;使用新的便捷的 AI 工具提高工作效率并不难&#xff0c…

    【Linux探索学习】第二十七弹——信号(一):Linux 信号基础详解

    Linux学习笔记&#xff1a; https://blog.csdn.net/2301_80220607/category_12805278.html?spm1001.2014.3001.5482 前言&#xff1a; 前面我们已经将进程通信部分讲完了&#xff0c;现在我们来讲一个进程部分也非常重要的知识点——信号&#xff0c;信号也是进程间通信的一…

    games101-(5/6)

    光栅化 投影完成之后&#xff0c;视图区域被确定在从[-1,1]的单位矩阵中&#xff0c;下一步就是光栅化 长宽比&#xff1a;ratio 垂直的可视角度&#xff1a;fild-of-view 可以看到的y 轴的范围&#xff0c;角度越小 越接近正交投影 屏幕坐标系 、 将多边形转化成像素 显示…

    Linux之详谈——权限管理

    目录 小 峰 编 程 ​编辑 一、权限概述 1、什么是权限 2、为什么要设置权限 3、Linux中的权限类别- 4、Linux中文件所有者 1&#xff09;所有者分类&#xff08;谁&#xff09; 2&#xff09;所有者的表示方法 ① u(the user who owns it)&#xff08;属主权限&…

    oracle比较一下统计信息差异吧

    统计信息发生了哪些变化&#xff1f; 从上次收集到最近一次收集有什么不同&#xff1f; set long 999999 longc 99999 line 100 select report, maxdiffpct from table(dbms_stats.diff_table_stats_in_history(SYS,T1,to_timestamp(2025-01-22 09:01:46,YYYY-MM-DD hh24:mi:s…

    【现代深度学习技术】深度学习计算 | 参数管理

    【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈PyTorch深度学习 ⌋ ⌋ ⌋ 深度学习 (DL, Deep Learning) 特指基于深层神经网络模型和方法的机器学习。它是在统计机器学习、人工神经网络等算法模型基础上&#xff0c;结合当代大数据和大算力的发展而发展出来的。深度学习最重…

    用WinForm如何制作简易计算器

    首先我们要自己搭好页面 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;namespace _7_简易计算…

    spring入门其实特别简单,也可以做单机。

    直接在官网配置 点右边的"ADD DEPENDENCIES",选“Spring Web” 然后点“GENERATE”&#xff0c;会自动下载一个demo.zip。解压demo.zip&#xff0c;用IntelliJ IDEA打开就能用了。 IntelliJ IDEA打开之后&#xff0c;你得配置你的

    智慧消防营区一体化安全管控 2024 年度深度剖析与展望

    在 2024 年&#xff0c;智慧消防营区一体化安全管控领域取得了令人瞩目的进展&#xff0c;成为保障营区安全稳定运行的关键力量。这一年&#xff0c;行业在政策驱动、技术创新应用、实践成果及合作交流等方面呈现出多元且深刻的发展态势&#xff0c;同时也面临着一系列亟待解决…

    C++封装红黑树实现mymap和myset和模拟实现详解

    文章目录 map和set的封装map和set的底层 map和set的模拟实现insertiterator实现的思路operatoroperator- -operator[ ] map和set的封装 介绍map和set的底层实现 map和set的底层 一份模版实例化出key的rb_tree和pair<k,v>的rb_tree rb_tree的Key和Value不是我们之前传统意…

    1. Java-MarkDown文件创建-工具类

    Java-MarkDown文件创建-工具类 1. 思路 根据markdown语法&#xff0c;拼装markdown文本内容 2. 工具类 import java.util.Arrays; import java.util.List;/*** Markdown生成工具类* Author: 20004855* Date: 2021/1/15 16:00*/ public class MarkdownGenerator {private Str…

    虚拟机中的IP地址总是变化怎么办

    1、问题概述&#xff1f; 在虚拟机中安装的centos或者redhat&#xff0c;默认情况下使用的都是dbcp模式&#xff0c;会自动的获取ip地址。 每次重启虚拟机后&#xff0c;可能都会使用不同的ip地址。 如何需要使用固定ip&#xff0c;就需要手动修改。 本文测试系统RedHat7.9…

    物业管理系统推动社区智能化与服务创新的未来发展路径

    内容概要 随着物业管理行业的不断发展&#xff0c;物业管理系统也逐渐成为社区管理的重要组成部分。它不仅能够显著提高服务效率&#xff0c;还带来了很多创新的服务模式&#xff0c;这些都让生活变得更加便利。首先&#xff0c;物业管理系统通过在线收费功能&#xff0c;可以…

    AI如何帮助解决生活中的琐碎难题?

    引言&#xff1a;AI已经融入我们的日常生活 你有没有遇到过这样的情况——早上匆忙出门却忘了带钥匙&#xff0c;到了公司才想起昨天的会议资料没有打印&#xff0c;或者下班回家还在纠结晚饭吃什么&#xff1f;这些看似微不足道的小事&#xff0c;往往让人疲惫不堪。而如今&a…

    QT+mysql+python 效果:

    # This Python file uses the following encoding: utf-8 import sysfrom PySide6.QtWidgets import QApplication, QWidget,QMessageBox from PySide6.QtGui import QStandardItemModel, QStandardItem # 导入需要的类# Important: # 你需要通过以下指令把 form.ui转为ui…

    基于RIP的MGRE实验

    实验拓扑 实验要求 按照图示配置IP地址配置静态路由协议&#xff0c;搞通公网配置MGRE VPNNHRP的配置配置RIP路由协议来传递两端私网路由测试全网通 实验配置 1、配置IP地址 [R1]int g0/0/0 [R1-GigabitEthernet0/0/0]ip add 15.0.0.1 24 [R1]int LoopBack 0 [R1-LoopBack0]i…

    Python微服务框架Nameko | python 小知识

    Python微服务框架Nameko | python 小知识 1. 微服务介绍 微服务架构是一种将应用程序拆分为多个小型服务的方法&#xff0c;每个服务都可以独立开发、部署和扩展。这种架构使得应用程序更加模块化、可维护和可扩展。微服务架构的核心在于服务间的通信&#xff0c;主要有同步通…

    多模态论文笔记——TECO

    大家好&#xff0c;这里是好评笔记&#xff0c;公主号&#xff1a;Goodnote&#xff0c;专栏文章私信限时Free。本文详细解读多模态论文TECO&#xff08;Temporally Consistent Transformer&#xff09;&#xff0c;即时间一致变换器&#xff0c;是一种用于视频生成的创新模型&…

    98.1 AI量化开发:长文本AI金融智能体(Qwen-Long)对金融研报大批量处理与智能分析的实战应用

    目录 0. 承前1. 简介1.1 通义千问(Qwen-Long)的长文本处理能力 2. 基础功能实现2.1 文件上传2.2 单文件分析2.3 多文件分析 3. 汇总代码&运行3.1 封装的工具函数3.2 主要功能特点3.3 使用示例3.4 首次运行3.5 运行结果展示 4. 注意事项4.1 文件要求4.2 错误处理机制4.3 最佳…