欢迎光临
我们一直在努力

C 语言转python快速入门(一)

C 语言转python快速入门(一)

这份笔记适配有C语言基础的学习者,对比C语言语法差异,整理了Python入门核心知识点

一、基础语法规范

  • 注释

  • 单行注释:# 注释内容,快捷键 Ctrl+/

  • 多行注释:""" 注释内容 """ 或 ''' 注释内容 '''(本质是多行字符串,未赋值时可作注释)

  • 语句结束

  • 无需加分号;,一行写一条语句即可

  • 一行写多条语句时,必须用;分隔(不推荐)

  • 打印输出

  • 函数:print(内容),自带换行,可直接打印单个/多个元素,多个元素用逗号分隔,自动用空格拼接,比C语言printf更便捷

  • `# 示例1:打印单个元素(字符串、整数、浮点数均可)
    print("Hello Python") # 打印字符串,输出:Hello Python
    print(100) # 打印整数,输出:100
    print(3.14) # 打印浮点数,输出:3.14

    示例2:打印多个元素(逗号分隔,自动空格拼接)

    name = "张三"
    age = 18
    print("姓名:", name, "年龄:", age) # 输出:姓名: 张三 年龄: 18

    示例3:结合字符串拼接打印(适配C语言学习者的拼接习惯)

    `

    `print("姓名:" + name + ",年龄:" + str(age)) # 输出:姓名:张三,年龄:18(需转义类型)`

    9. 不换行:`print(内容, end='')`,`end`可自定义结尾字符(如逗号、空格),对应C语言printf("%s", str)不换行的需求
    `# 示例1:不换行打印,默认end为空字符串
    print("Hello", end='')
    print(" World") # 输出:Hello World(两句拼接在同一行)

    示例2:自定义end为逗号,用于连续打印多个数据

    print(10, end=',')
    print(20, end=',')
    print(30) # 输出:10,20,30

    示例3:end为换行符(与默认效果一致)

    print("第一行", end='\\n')
    ` `print("第二行") # 输出:第一行(换行)第二行`

  • 代码缩进

  • Python用缩进(Tab/4个空格) 表示代码从属关系(替代C语言的{}),缩进错误会直接报错


  • 二、字面量与变量

    1. 字面量

    程序中直接写出来的固定数据,如:10、3.14、"hello"、True

    2. 变量

    • 定义:无需声明类型,直接赋值即可(Python是动态类型语言,一种变量可接收不同类型的值)

    • 命名规则(和C语言一致,即标识符命名规范):

    • 只能由字母、数字、下划线组成

    • 不能以数字开头

    • 区分大小写,不能用Python关键字(如if、for、import)

    3. 数据类型与判断

    类型示例查看类型类型判断
    整数 int 10, -5 type(10) isinstance(10, int)
    浮点数 float 3.14, 0.5 type(3.14) isinstance(3.14, float)
    字符串 str “hello” type("hello") isinstance("hello", str)
    布尔 bool True/False type(True) isinstance(True, bool)
    • 补充:type(数据/变量) 用于查看变量/数据的类型;isinstance(数据, 类型) 查看数据是否属于该类型,是返回布尔值True,否返回False(注意:原笔记中ture拼写错误,正确为True)

    • 补充技巧:Ctrl+D 可快速复制当前行(对应原笔记“快速负责”,正确为“快速复制”)


    三、字符串(重点)

    1. 三种定义方式

    # 1. 双引号(支持嵌套单引号,可使用转义字符)
    s1 = "hello\\"" # \\ 为转义字符,用于输出特殊符号(如双引号)
    # 2. 单引号(支持嵌套双引号)
    s2 = 'hello'
    # 3. 三引号(支持多行字符串,保留换行和缩进)
    s3 = """
    hello
    world
    """
    print(s1)
    print(s2)
    print(s3)

    2. 字符串操作

  • 拼接:用+号拼接字符串,需注意拼接的元素必须都是字符串类型(非字符串需用str()转换),对比C语言strcat函数,操作更简洁
  • 示例1:两个字符串拼接

    s1 = "Hello"
    s2 = "Python"
    print(s1 + s2) # 输出:HelloPython(无空格拼接)
    print(s1 + " " + s2) # 输出:Hello Python(加空格拼接)

    示例2:字符串与非字符串拼接(需转换类型,避免报错)

    age = 18
    # 错误示例:print("年龄:" + age) # 报错:TypeError(int不能和str拼接)
    print("年龄:" + str(age)) # 正确:转换为字符串,输出:年龄:18

    示例3:多字符串连续拼接

    name = "张三"
    score = 95
    ` `print("姓名:" + name + ",分数:" + str(score) + ",等级:优秀") # 输出:姓名:张三,分数:95,等级:优秀`

  • 类型转换:非字符串 → 字符串用 str(数据),如 str(10) 可将int类型转为字符串;字符串 → 其他类型用int()、float(),适配输入输出场景
  • 示例1:非字符串转字符串

    num1 = 100 # int类型
    num2 = 3.14 # float类型
    bool1 = True # bool类型
    print(str(num1), type(str(num1))) # 输出:100 <class 'str'>
    print(str(num2), type(str(num2))) # 输出:3.14 <class 'str'>
    print(str(bool1), type(str(bool1))) # 输出:True <class 'str'>

    示例2:字符串转其他类型(常用在输入后转换)

    s_num = "100"
    s_float = "3.14"
    print(int(s_num), type(int(s_num))) # 输出:100 <class 'int'>
    print(float(s_float), type(float(s_float))) # 输出:3.14 <class 'float'>

    注意:无法将非数值类字符串转为数字(报错)

    # print(int(“hello”)) # 报错:ValueError`

  • 格式化输出:三种常用方式,适配不同场景,比C语言printf格式化更灵活,重点掌握f-string(最简洁)
  • 方式1:f-string(Python 3.6+,最常用,简洁直观)

  • name = "张三"
    age = 18
    score = 95.5
    print(f"姓名:{name},年龄:{age},分数:{score}") # 输出:姓名:张三,年龄:18,分数:95.5

    方式2:format()方法(兼容所有版本,通用)

    print("姓名:{},年龄:{},分数:{}".format(name, age, score)) # 输出同上

    指定占位顺序(避免参数顺序出错)

    print("分数:{2},姓名:{0},年龄:{1}".format(name, age, score)) # 输出:分数:95.5,姓名:张三,年龄:18

    方式3:%格式化(类似C语言printf,适配C语言学习者习惯)

    print("姓名:%s,年龄:%d,分数:%.1f" % (name, age, score)) # 输出:姓名:张三,年龄:18,分数:95.5
    ` `# 说明:%s对应字符串,%d对应整数,%.1f对应保留1位小数的浮点数`

    3. 字符串补充特性(新增)

    • 特性:不可修改、有序、可迭代,每一个字符都对应一个下标,支持正反向索引(和列表一致)

    • 切片:与列表切片规则完全一致,语法 字符串[开始:结束:步长]

    • 成员判断:用 in 运算符,判断某个字符是否在字符串中,用法与列表一致


    四、输入输出

  • 输入函数:input(提示文字),提示文字用于告知用户需输入的内容,对比C语言scanf,无需指定格式符,用法更简单
  • 示例1:基础输入(提示用户输入姓名)

    name = input("请输入你的姓名:")
    print("你输入的姓名是:", name) # 输入:张三,输出:你输入的姓名是: 张三

    示例2:输入后直接打印(无需赋值给变量)

    input("请输入任意内容,按回车继续…") # 仅提示,不保存输入内容
    ` `print("输入完成!")`

  • 所有键盘输入的内容默认是字符串类型,即使输入数字,也会被识别为字符串,这是与C语言输入的核心区别(C语言需指定int/float类型)
  • 示例:输入数字,默认是字符串类型

    num = input("请输入一个数字:")
    print("你输入的内容:", num) # 输入:100,输出:你输入的内容: 100
    print("输入内容的类型:", type(num)) # 输出:<class 'str'>(字符串类型)

    # 对比:若直接进行算术运算,会报错(字符串无法参与运算)
    ` `# print(num + 10) # 报错:TypeError(str和int不能相加)`

  • 需要数字时,必须强制类型转换(如 int()、float()),结合输入函数实现“输入数字并运算”,适配实际开发场景
  • 示例1:输入整数并运算

    num1 = int(input("请输入第一个整数:"))
    num2 = int(input("请输入第二个整数:"))
    print("两个数的和:", num1 + num2)
    print("两个数的积:", num1 * num2)

    运行流程:输入10 → 输入20 → 输出:两个数的和:30,两个数的积:200

    示例2:输入浮点数并运算(计算圆的面积)

    radius = float(input("请输入圆的半径:"))
    pi = 3.14
    area = pi * radius ** 2
    print(f"圆的面积为:{area:.2f}") # 保留2位小数,输入5 → 输出:78.50

    示例3:异常处理(避免输入非数字报错,提升代码健壮性)

    try:
    num = int(input("请输入一个整数:"))
    print("你输入的整数是:", num)
    except:
    ` ` print("输入错误!请输入有效的整数。")`


    五、运算符(对比C语言)

    1. 算术运算符

    运算符作用示例结果
    / 普通除法 10 / 3 3.333…
    // 整除(取整) 10 // 3 3
    ** 幂运算(如10的三次方) 10 ** 3 1000
    % 取余 10 % 3 1
    • 优先级:** > * / // % > + –

    2. 逻辑运算符(Python专用,替代C语言符号)

    PythonC语言含义
    and & 逻辑与
    or `
    not ! 逻辑非
    • 补充:逻辑运算符的返回值为布尔类型(True/False)

    3. 比较/赋值运算符

    和C语言完全一致:> < >= <= == !=、= += -= *=等


    六、流程控制语句

    1. 条件语句

    (1)if-elif-else(替代C语言的if-else if-else)

    # 基础if语法示例
    s1 = 60
    if s1 > 100: # if 条件:(末尾必须加冒号)
    print("jassh") # 通过Tab缩进表达从属关系
    print("jassh")
    print("mmn") # 无缩进,不属于if语句块,必执行

    # if-elif-else完整示例(elif == else if)
    score = int(input("输入分数:"))
    if score >= 90:
    print("优秀")
    elif score >= 60:
    print("及格")
    else:
    print("不及格")

    (2)match-case(替代C语言的switch)

    s2 = int(input())
    match s2:
    case 1:print("jassh")
    case 2:print("jassh")
    case 3|4:print("jassh") # | 相当于3或者4
    case _:print("jannnsh") # 当以上都不满足的情况下,等价于switch的default
    # 特点:当一条case语句执行完之后,其他case语句将不再执行,无需手动加break

    2. 循环语句

    (1)while循环

    # 语法:while 条件: 循环语句 else: 条件不成立时执行的语句(不循环时执行)
    i = 0
    while i < 5:
    print(i)
    i += 1
    else:
    # 循环正常结束(非break中断)时执行
    print("循环结束")

    (2)for循环(Python特色,可与else结合)
    • 基础语法:for 变量 in 可迭代对象:,变量(如a)无需提前定义,每次循环将可迭代对象(如字符串bee)的一个元素赋值给变量,完成一次循环

    • 搭配range()生成数字序列(重点):

    3. 循环控制

    • break、continue 用法和C语言完全一致,语句末尾无需加;

    • break:跳出整个循环;continue:跳过本次循环,执行下一次循环


    七、调试方法

  • 打断点:代码行号左侧点击,出现红点

  • 启动调试:点击调试按钮(小虫子图标)

  • 逐行执行:查看变量值和程序执行流程


  • 八、随机数生成

    # 导入随机数模块
    import random
    # 生成1~100之间的随机整数(包含1和100)
    random_num = random.randint(1, 100)
    print(random_num)


    九、数据容器(重点,等价于C语言的数组,拓展全类型)

    Python中数据容器:列表list、字符串str、元组tuple、集合set、字典dict,均用于存储多个数据,各有特性,适配不同场景。

    1. 列表list(最常用,增强版数组)

  • 定义:列表(list)是Python中最常用的数据容器,语法格式为 列表名 = [元素1, 元素2, …, 元素n],可以理解为C语言数组的“增强版”,功能比数组更灵活。
    `# 示例1:存储同一种类型元素(和C语言数组类似)
    num_list = [1, 2, 3, 4, 5] # 存储整数类型
  • 示例2:存储不同类型元素(Python特色,C语言数组不支持)

    mix_list = [10, "hello", 3.14, True, [6,7,8]] # 整数、字符串、浮点数、布尔值、嵌套列表
    print("同类型列表:", num_list)
    ` `print("不同类型列表:", mix_list)`

  • 核心特性1:可存储不同类型的数据:这是列表与C语言数组最核心的区别之一,C语言数组只能存储同一种数据类型,而Python列表可以同时存储整数、字符串、浮点数、布尔值,甚至可以嵌套其他列表,极大提升了数据存储的灵活性。

  • 核心特性2:元素有序、可重复、可修改:有序指列表中的元素有固定的排列顺序,后续添加、删除元素不会改变原有元素的相对顺序;可重复指同一个元素可以在列表中出现多次;可修改指可以通过索引直接修改列表中的元素值,也可以添加、删除元素(C语言数组长度固定,无法直接添加/删除元素)。
    `# 有序性:元素顺序固定,输出与定义顺序一致

  • order_list = ["a", "b", "c"]
    print("有序列表输出:", order_list) # 输出:['a', 'b', 'c']

    可重复性:元素可以重复出现

    repeat_list = [1, 2, 2, 3, 3, 3]
    print("可重复列表:", repeat_list) # 输出:[1, 2, 2, 3, 3, 3]

    可修改性:后续可修改元素值

    modify_list = [10, 20, 30]
    modify_list[1] = 200 # 修改索引1的元素
    ` `print("修改后列表:", modify_list) # 输出:[10, 200, 30]`

  • 索引访问(和C语言数组一致):列表中的每个元素都有一个唯一的索引(下标),用于定位元素位置,索引分为正向索引和反向索引两种,用法和C语言数组的下标访问完全一致,便于快速获取指定元素。
  • lst = [1, 2, 3, 4, 5, 6]
    # 正向索引:从0开始,依次递增,对应元素的第1个、第2个…第n个
    print("正向索引0对应的元素:", lst[0]) # 输出:1(第1个元素)
    print("正向索引2对应的元素:", lst[2]) # 输出:3(第3个元素)
    # 反向索引:从-1开始,依次递减,-1对应最后一个元素,-2对应倒数第二个元素
    print("反向索引-1对应的元素:", lst[1]) # 输出:6(最后一个元素)
    print("反向索引-3对应的元素:", lst[3]) # 输出:4(倒数第三个元素)

    注意:索引不能超出列表范围,否则会报错(和C语言数组下标越界报错类似)

    `

    `# print(lst[10]) # 报错:IndexError: list index out of range`

  • 修改元素:由于列表是可修改的,我们可以通过“列表名[索引] = 新值”的方式,直接修改指定索引位置的元素值,操作简单直观,无需像C语言那样通过循环间接修改。
    `lst = [1, 2, 3, 4, 5, 6]
  • # 修改索引1的元素(原元素为2),改为99
    lst[1] = 99
    print("修改后列表:", lst) # 输出:[1, 99, 3, 4, 5, 6]
    # 修改索引4的元素(原元素为5),改为500
    lst[4] = 500
    print("再次修改后列表:", lst) # 输出:[1, 99, 3, 4, 500, 6]
    # 也可以修改不同类型的元素
    lst[2] = "python"
    ` `print("修改为不同类型后:", lst) # 输出:[1, 99, 'python', 4, 500, 6]`

  • 删除元素:列表提供多种删除元素的方式,可根据需求选择“按索引删除”“按元素值删除”或“删除最后一个元素”,比C语言数组删除元素更便捷(C语言需手动移动元素,列表可直接操作)。
    `lst = [1, 2, 3, 4, 5, 6]
  • # 方式1:del关键字(按索引删除,彻底删除,无返回值)
    del lst[2] # 删除索引2的元素(值为3)
    print("del删除后:", lst) # 输出:[1, 2, 4, 5, 6]
    # 方式2:remove()方法(按元素值删除,删除第一个匹配的元素)
    lst.remove(4) # 删除第一个值为4的元素
    print("remove删除后:", lst) # 输出:[1, 2, 5, 6]
    # 方式3:pop()方法(按索引删除,默认删除最后一个元素,返回被删除的元素)
    del_val1 = lst.pop() # 默认删除最后一个元素(值为6)
    print("pop默认删除返回值:", del_val1) # 输出:6
    print("pop默认删除后:", lst) # 输出:[1, 2, 5]
    del_val2 = lst.pop(1) # 删除索引1的元素(值为2)
    print("pop按索引删除返回值:", del_val2) # 输出:2
    ` `print("pop按索引删除后:", lst) # 输出:[1, 5]`

  • 列表切片(截取子列表):切片是列表的核心实用功能,用于从列表中截取一部分元素,组成一个新的子列表,语法简洁,无需像C语言那样通过循环截取,极大提升效率。

  • 切片语法:列表名[开始索引:结束索引:步长],三个参数均可省略,参数之间用冒号分隔,每个参数的作用如下:
    开始索引:指定切片的起始位置,默认值为0(从列表第一个元素开始);

  • 结束索引:指定切片的结束位置,默认值为列表长度(截取到列表最后一个元素);

  • 步长:指定切片时跳过的元素个数,默认值为1(不跳过元素,连续截取),步长为负数时表示反向截取。

  • 切片规则:切片遵循“左闭右开”原则,即包含开始索引对应的元素,不包含结束索引对应的元素;当参数省略时,会使用默认值,下面通过具体示例演示各种切片用法。
    `lst = [1, 2, 3, 4, 5, 6, 7, 8]

  • # 1. 省略所有参数(默认开始=0,结束=末尾,步长=1):截取整个列表
    print("截取整个列表:", lst[:]) # 输出:[1,2,3,4,5,6,7,8]
    # 2. 省略开始和步长(默认开始=0,步长=1):从开头截取到结束索引5(不包含5)
    print("从开头截取到索引5:", lst[:5]) # 输出:[1,2,3,4,5]
    # 3. 省略结束和步长(默认结束=末尾,步长=1):从开始索引2截取到末尾
    print("从索引2截取到末尾:", lst[2:]) # 输出:[3,4,5,6,7,8]
    # 4. 指定开始和结束,省略步长(默认步长=1):从索引2截取到索引6(不包含6)
    print("从索引2截取到索引6:", lst[2:6]) # 输出:[3,4,5,6]
    # 5. 指定步长为2:从开头截取,每隔1个元素取一个(跳过1个元素)
    print("步长为2截取:", lst[::2]) # 输出:[1,3,5,7]
    # 6. 步长为-1:反向截取(从末尾到开头,相当于倒序)
    print("反向截取(倒序):", lst[::1]) # 输出:[8,7,6,5,4,3,2,1]
    # 7. 反向截取指定范围:从索引6反向截取到索引2(不包含2)
    ` `print("反向截取指定范围:", lst[6:2:1]) # 输出:[7,6,5,4]`

  • 列表补充操作(新增,高频实用):除了上述基础操作,列表还有很多常用的补充操作,涵盖数据统计、列表合并、成员判断、列表推导式等,这些操作能大幅简化代码,提升开发效率。

  • 数据统计:Python提供内置函数,可直接对列表中的数值类型元素进行统计,无需像C语言那样通过循环计算,操作简单高效,常用统计函数如下:
    min(列表):获取列表中所有数值元素的最小值;

  • max(列表):获取列表中所有数值元素的最大值;

  • sum(列表):计算列表中所有数值元素的总和;

  • len(列表):获取列表中元素的总个数(通用函数,适用于所有数据容器)。

  • 合并两个列表:实际开发中经常需要将两个列表合并为一个列表,Python提供3种常用方式,可根据需求选择(是否修改原列表),比C语言数组合并更便捷。

  • `l1 = [1, 2, 3]
    l2 = [4, 5, 6]
    # 方式1:+号拼接(生成新列表,不修改原列表l1和l2)
    l3 = l1 + l2
    print("+号拼接新列表:", l3) # 输出:[1,2,3,4,5,6]
    print("原列表l1:", l1) # 输出:[1,2,3](无变化)
    print("原列表l2:", l2) # 输出:[4,5,6](无变化)

    # 方式2:extend()方法(将l2的所有元素添加到l1的末尾,修改原列表l1,不修改l2)
    l1.extend(l2)
    print("extend修改后l1:", l1) # 输出:[1,2,3,4,5,6]
    print("原列表l2:", l2) # 输出:[4,5,6](无变化)

    # 方式3:解包拼接(用*解包两个列表的元素,生成新列表,不修改原列表)
    l1 = [1,2,3] # 重置l1
    l4 = [*l1, *l2] # *l1表示解包l1的元素,*l2表示解包l2的元素
    print("解包拼接新列表:", l4) # 输出:[1,2,3,4,5,6]
    ` `print("原列表l1:", l1) # 输出:[1,2,3](无变化)`

  • 成员判断:判断某个元素是否存在于列表中,使用in运算符(存在返回True),使用not in运算符(不存在返回True),无需像C语言那样通过循环遍历判断,语法简洁。`lst = [1, 2, 3, 4, 5]
  • # 判断元素3是否在列表中
    print("3在列表中:", 3 in lst) # 输出:True(存在)
    # 判断元素6是否在列表中
    print("6在列表中:", 6 in lst) # 输出:False(不存在)
    # 判断元素3是否不在列表中(取反)
    print("3不在列表中:", 3 not in lst) # 输出:False
    # 判断元素6是否不在列表中(取反)
    ` `print("6不在列表中:", 6 not in lst) # 输出:True`

  • 列表推导式(简化列表创建,高效便捷):列表推导式是Python的特色语法,用于快速创建列表,可替代“循环+append()”的方式,代码更简洁、执行效率更高,语法格式为 新列表名 = [要插入的元素 for 变量 in 可迭代对象 if 条件判断],其中“if条件判断”可省略(无筛选条件时)。
    `# 示例1:无筛选条件,生成1-10的整数列表(替代for循环+append)
  • 普通循环方式(繁琐)

    lst1 = []
    for i in range(1, 11):
    lst1.append(i)
    print("普通循环生成列表:", lst1) # 输出:[1,2,3,4,5,6,7,8,9,10]

    列表推导式方式(简洁)

    lst2 = [i for i in range(1, 11)]
    print("推导式生成列表:", lst2) # 输出:[1,2,3,4,5,6,7,8,9,10]

    # 示例2:有筛选条件,生成1-10的偶数列表(筛选i%2==0的元素)
    lst3 = [i for i in range(1, 11) if i % 2 == 0]
    print("筛选偶数的推导式列表:", lst3) # 输出:[2,4,6,8,10]

    # 示例3:复杂推导式,生成1-10的偶数的平方列表
    lst4 = [i**2 for i in range(1, 11) if i % 2 == 0]
    ` `print("偶数平方的推导式列表:", lst4) # 输出:[4,16,36,64,100]`

    2. 元组tuple(不可修改版列表)

    • 核心特性:元组(tuple)与列表(list)的用法高度相似,但最核心的区别是元素不可修改,相当于C语言中用const修饰的数组(const数组不可修改元素值)。除此之外,元组同样具备“有序、可重复、可迭代”的特性,有序指元素排列顺序固定,可重复指同一个元素可多次出现,可迭代指可以通过循环遍历元组中的元素。

    • 定义:元组的语法格式为 元组名称 = (元素1, 元素2, …, 元素n),与列表的区别是用圆括号()包裹元素(列表用方括号[])。需要特别注意的是,定义单元素元组时,必须在元素末尾加逗号,,否则Python会将其识别为普通数据类型(而非元组),这是元组定义的高频易错点。

    # 示例1:多元素元组(正常定义,用圆括号包裹)
    t1 = (1, 2, 3, 4, 5) # 存储5个整数的元组
    print("多元素元组:", t1) # 输出:(1, 2, 3, 4, 5)
    print("元组类型:", type(t1)) # 输出:<class 'tuple'>

    # 示例2:空元组(两种定义方式,均可用)
    t2 = () # 方式1:直接用空圆括号
    t3 = tuple() # 方式2:用tuple()函数
    print("空元组t2:", t2) # 输出:()
    print("空元组t3:", t3) # 输出:()

    # 示例3:单元素元组(重点!必须加逗号)
    t4 = (10,) # 正确定义:元素末尾加逗号,是元组类型
    t5 = (10) # 错误定义:无逗号,被识别为整数int类型
    print("单元素元组t4:", t4) # 输出:(10,)
    print("t4类型:", type(t4)) # 输出:<class 'tuple'>
    print("错误定义t5:", t5) # 输出:10
    print("t5类型:", type(t5)) # 输出:<class 'int'>

    # 示例4:省略圆括号的元组(允许省略,但建议加上,提升可读性)
    t6 = 5, 7, 9 # 省略圆括号,本质也是元组
    print("省略括号的元组:", t6) # 输出:(5, 7, 9)
    ` `print("t6类型:", type(t6)) # 输出:<class 'tuple'>`

    • 常用方法:由于元组元素不可修改,因此元组的方法比列表少,核心常用方法只有2个,均用于元素查询,无法像列表那样添加、删除、修改元素。

    • count(元素):用于统计某个指定元素在元组中出现的次数,语法格式为 元组名.count(要统计的元素),返回值为整数(出现的次数),若元素不存在,返回0。

    `t = (1, 2, 3, 2, 4, 2, 5)
    # 统计元素2在元组中出现的次数
    count_2 = t.count(2)
    print("元素2出现的次数:", count_2) # 输出:3(元素2共出现3次)
    # 统计元素6在元组中出现的次数(元素不存在)
    count_6 = t.count(6)
    ` `print("元素6出现的次数:", count_6) # 输出:0`

    **index(元素)**:用于查找某个指定元素在元组中**第一次出现**的索引位置,语法格式为 `元组名.index(要查找的元素)`,返回值为整数(索引值),若元素不存在,会直接报错(和列表的index()方法用法一致)。
    `t = (1, 2, 3, 2, 4, 2, 5)
    # 查找元素4第一次出现的索引
    index_4 = t.index(4)
    print("元素4第一次出现的索引:", index_4) # 输出:4(元素4在索引4位置)
    # 查找元素2第一次出现的索引
    index_2 = t.index(2)
    print("元素2第一次出现的索引:", index_2) # 输出:1(元素2在索引1位置)
    # 查找不存在的元素(会报错)
    ` `# index_6 = t.index(6) # 报错:ValueError: tuple.index(x): x not in tuple`

    组包与解包(特色用法)

    # 组包:将多个数据自动封装为元组(可省略括号)
    t1 = (1,2,3,4,5,6)
    t6 = 5,7,9 # 省略括号,本质也是元组(建议加上括号,更规范)
    # 解包:将元组的元素依次赋值给多个变量
    a,b,c,d,e,f = t1 # a对应1,b对应2,…,f对应6
    print(a) # 输出:1

    # 拓展解包:用*收集多余元素(封装为列表)
    x,*y,z = t1 # x接收第一个元素1,z接收最后一个元素6,其余元素由y接收(y是列表[2,3,4,5])
    # *表示收集所有剩余元素,封装到列表中,可处理数量不确定的元素

    3. 集合set(自动去重容器)

    • 核心特性:集合(set)是Python中一种特殊的数据容器,核心特性有三个,与列表、元组差异较大,需要重点区分:
      无序性:集合中的元素没有固定的排列顺序,每次打印集合,元素的输出顺序可能不同(与列表、元组的有序性完全相反),因此集合不支持索引访问(无下标概念);

    • 不可重复性:集合会自动去除重复的元素,无论定义时输入多少个重复元素,最终集合中只会保留一个(这是集合最常用的特性之一,用于去重);

    • 可修改性:集合可以添加、删除元素,但由于其无序性,无法像列表那样通过索引修改元素(只能先删除旧元素,再添加新元素)。

    • 定义:集合的语法格式为 集合名称 = {元素1, 元素2, …, 元素n},用大括号{}包裹元素,但需要特别注意:{} 空集合不能用定义({}用于定义空字典),空集合必须用 set() 函数定义,这是集合定义的高频易错点。此外,也可以用 set(可迭代对象) 函数,将列表、元组等可迭代对象转换为集合(自动去重)。

    # 示例1:正常集合(自动去重)
    s1 = {1, 2, 3, 2, 4} # 定义时包含重复元素2
    print("自动去重后的集合:", s1) # 输出:{1,2,3,4}(重复元素2被自动去除)
    print("集合类型:", type(s1)) # 输出:<class 'set'>
    # 示例2:空集合(重点!必须用set()定义)
    s2 = set() # 正确:空集合
    s3 = {} # 错误:定义的是空字典,不是集合
    print("空集合s2:", s2) # 输出:set()
    print("s2类型:", type(s2)) # 输出:<class 'set'>
    print("错误定义s3:", s3) # 输出:{}
    print("s3类型:", type(s3)) # 输出:<class 'dict'>

    # 示例3:用列表转换为集合(自动去重)
    lst = [1, 2, 3, 3, 4, 5]
    s4 = set(lst) # 将列表转换为集合,自动去重
    print("列表转换的集合:", s4) # 输出:{1,2,3,4,5}

    # 示例4:用元组转换为集合(自动去重)
    t = (1, 1, 2, 3, 3, 3)
    s5 = set(t)
    ` `print("元组转换的集合:", s5) # 输出:{1,2,3}`

    • 常见操作:集合的常见操作分为“元素操作”和“集合运算”两类,元素操作包括添加、删除、清空,集合运算包括交集、并集、差集(类似数学中的集合运算),具体用法如下:

    一、元素操作(添加、删除、清空)

    s = {1, 2, 3, 4, 5}

    1. 添加元素:add()方法(只能添加单个元素,元素已存在则不操作)

    s.add(6) # 添加元素6(不存在,添加成功)
    print("添加元素6后:", s) # 输出:{1,2,3,4,5,6}
    s.add(3) # 添加元素3(已存在,不操作)
    print("添加已存在元素3后:", s) # 输出:{1,2,3,4,5,6}(无变化)

    2. 删除元素:两种常用方法(remove()和discard())

    # 方法1:remove()方法(删除指定元素,元素不存在会报错)
    s.remove(3) # 删除元素3(存在,删除成功)
    print("remove删除元素3后:", s) # 输出:{1,2,4,5,6}
    # s.remove(7) # 删除元素7(不存在,报错:KeyError)

    # 方法2:discard()方法(删除指定元素,元素不存在不报错,推荐使用)
    s.discard(4) # 删除元素4(存在,删除成功)
    print("discard删除元素4后:", s) # 输出:{1,2,5,6}
    s.discard(7) # 删除元素7(不存在,不报错,无变化)
    print("discard删除不存在元素7后:", s) # 输出:{1,2,5,6}

    3. 清空集合:clear()方法(清空所有元素,变为空集合)

    s.clear()
    print("清空后的集合:", s) # 输出:set()

    二、集合运算(交集、并集、差集,类似数学集合)

    s1 = {1, 2, 3, 4} # 集合1
    s2 = {3, 4, 5, 6} # 集合2
    # 1. 交集:& 符号,获取两个集合共有的元素(既在s1中,也在s2中)
    intersection = s1 & s2
    print("s1和s2的交集:", intersection) # 输出:{3,4}

    # 2. 并集:| 符号,获取两个集合的所有元素(去重)
    union = s1 | s2
    print("s1和s2的并集:", union) # 输出:{1,2,3,4,5,6}

    # 3. 差集:- 符号,获取“前一个集合有、后一个集合没有”的元素
    diff1 = s1 s2 # s1有、s2没有的元素
    diff2 = s2 s1 # s2有、s1没有的元素
    print("s1 – s2(差集):", diff1) # 输出:{1,2}
    print("s2 – s1(差集):", diff2) # 输出:{5,6}

    三、集合推导式(简化集合创建,自动去重)

    语法:新集合名 = {要插入的元素 for 变量 in 可迭代对象 if 条件判断}

    # 示例:生成1-10的奇数集合
    s3 = {i for i in range(1, 11) if i % 2 == 1}
    print("1-10的奇数集合:", s3) # 输出:{1,3,5,7,9}

    # 示例:生成列表中不重复的偶数集合
    lst = [2, 4, 2, 6, 4, 8]
    s4 = {i for i in lst if i % 2 == 0}
    ` `print("列表去重后的偶数集合:", s4) # 输出:{2,4,6,8}`

    4. 字典dict(键值对容器,C语言无对应类型)

    • 核心特性:字典(dict)是Python中最灵活、最常用的数据容器之一,C语言中没有对应的类型,其核心特性与列表、元组、集合差异较大,重点关注以下4点:
      键值对存储:字典不存储单个元素,而是以“键值对(key:value)”的形式存储数据,每个键值对由“键(key)”和“值(value)”组成,key用于定位value,类似C语言中的“键值对数组”(但更灵活);

    • key唯一性:字典中的key必须是唯一的,不能重复,若定义时出现重复key,后面的key会覆盖前面的key;value可以重复,且可以是任意数据类型;

    • 有序性:Python 3.7版本及以上,字典是有序的(元素顺序与定义顺序一致);Python 3.7版本以下,字典是无序的,日常开发中无需刻意关注版本,按有序使用即可;

    • 可修改性:字典可以添加、删除、修改键值对,操作灵活,可根据key快速定位并修改对应的value。

    • 定义:字典的语法格式为 字典名称 = {key1:value1, key2:value2, …, keyn:valuen},用大括号{}包裹键值对,每个键值对用冒号:分隔,多个键值对用逗号,分隔。空字典有两种定义方式:字典名 = {} 或 字典名 = dict(),也可以用 dict(键值对参数) 或 dict(可迭代对象) 函数创建字典。

    # 示例1:正常字典(key为字符串,value为不同类型)
    dict1 = {
    "name": "张三", # key: "name",value: 字符串
    "age": 18, # key: "age",value: 整数
    "score": 90.5, # key: "score",value: 浮点数
    "is_pass": True, # key: "is_pass",value: 布尔值
    "hobbies": ["篮球", "游戏"] # key: "hobbies",value: 列表
    }
    print("正常字典:", dict1)
    print("字典类型:", type(dict1)) # 输出:<class 'dict'>

    # 示例2:空字典(两种定义方式)
    dict2 = {} # 方式1:用空大括号
    dict3 = dict() # 方式2:用dict()函数
    print("空字典dict2:", dict2) # 输出:{}
    print("空字典dict3:", dict3) # 输出:{}

    # 示例3:重复key的情况(后面的key覆盖前面的)
    dict4 = {"name": "张三", "name": "李四", "age": 19}
    print("重复key的字典:", dict4) # 输出:{'name': '李四', 'age': 19}(前面的name被覆盖)

    # 示例4:用dict()函数创建字典
    dict5 = dict(name="王五", age=20, score=88) # 键值对参数
    dict6 = dict([("name", "赵六"), ("age", 21)]) # 可迭代对象(元组组成的列表)
    print("dict()参数创建:", dict5) # 输出:{'name': '王五', 'age': 20, 'score': 88}
    ` `print("dict()可迭代对象创建:", dict6) # 输出:{'name': '赵六', 'age': 21}`

    • 常用操作:字典的常用操作围绕“键值对”展开,包括访问value、修改value、添加键值对、删除键值对、遍历字典、字典推导式等,具体用法如下,重点掌握“通过key操作value”:
      `dict1 = {“name”: “张三”, “age”: 18, “score”: 90}

    一、访问value(核心:通过key访问,不可用索引)

    # 方式1:字典名[key](直接访问,key不存在会报错)
    print("通过key访问name:", dict1["name"]) # 输出:张三
    print("通过key访问age:", dict1["age"]) # 输出:18
    # print(dict1["gender"]) # key不存在,报错:KeyError: 'gender'

    # 方式2:get()方法(安全访问,key不存在返回None或指定默认值,推荐使用)
    print("get()访问gender(无默认值):", dict1.get("gender")) # 输出:None
    print("get()访问gender(有默认值):", dict1.get("gender", "男")) # 输出:男(指定默认值)

    二、修改value(通过key赋值,key存在则修改,不存在则添加)

    dict1["age"] = 19 # key"age"存在,修改其value
    print("修改age后:", dict1) # 输出:{'name': '张三', 'age': 19, 'score': 90}

    三、添加键值对(key不存在时,直接赋值即可添加)

    dict1["gender"] = "男" # key"gender"不存在,添加键值对
    dict1["hobbies"] = ["篮球", "编程"] # 添加value为列表的键值对
    print("添加键值对后:", dict1) # 输出:{'name': '张三', 'age': 19, 'score': 90, 'gender': '男', 'hobbies': ['篮球', '编程']}

    四、删除键值对(通过key删除,常用del关键字和pop()方法)

    # 方式1:del关键字(删除指定key对应的键值对,key不存在报错)
    del dict1["score"] # 删除key"score"对应的键值对
    print("del删除score后:", dict1) # 输出:{'name': '张三', 'age': 19, 'gender': '男', 'hobbies': ['篮球', '编程']}

    # 方式2:pop()方法(删除指定key对应的键值对,返回被删除的value,key不存在可指定默认值)
    del_val = dict1.pop("hobbies") # 删除key"hobbies",返回其value
    print("pop删除返回值:", del_val) # 输出:['篮球', '编程']
    print("pop删除hobbies后:", dict1) # 输出:{'name': '张三', 'age': 19, 'gender': '男'}
    # key不存在时,指定默认值(不报错)
    del_val2 = dict1.pop("score", "无此key")
    print("pop删除不存在key的返回值:", del_val2) # 输出:无此key

    五、遍历字典(三种常用方式,重点掌握遍历键值对)

    方式1:遍历所有key(用keys()方法)

    print("遍历所有key:")
    for key in dict1.keys():
    print(key) # 输出:name、age、gender

    方式2:遍历所有value(用values()方法)

    print("遍历所有value:")
    for value in dict1.values():
    print(value) # 输出:张三、19、男

    方式3:遍历所有键值对(用items()方法,最常用)

    print("遍历所有键值对:")
    for key, value in dict1.items():
    print(f"{key}: {value}") # 输出:name: 张三、age: 19、gender: 男

    六、字典推导式(简化字典创建,类似列表推导式)

    语法:新字典名 = {key: value for 变量 in 可迭代对象 if 条件判断}

    # 示例1:生成key为1-5,value为对应平方的字典
    dict7 = {i: i**2 for i in range(1, 6)}
    print("1-5平方的字典:", dict7) # 输出:{1: 1, 2: 4, 3: 9, 4: 16, 5: 25}

    # 示例2:筛选key为偶数的字典
    dict8 = {i: i*2 for i in range(1, 11) if i % 2 == 0}
    ` `print("key为偶数的字典:", dict8) # 输出:{2:4, 4:8, 6:12, 8:16, 10:20}`


    十、补充:列表常用方法(拓展必备)

    方法作用
    lst.append(元素) 末尾添加元素
    lst.insert(索引, 元素) 指定位置插入元素
    lst.pop(索引) 删除指定索引元素,默认删最后一个
    lst.remove(元素) 删除第一个指定元素
    lst.clear() 清空列表
    len(lst) 获取列表长度(通用函数)

    赞(0)
    未经允许不得转载:171主机测评 » C 语言转python快速入门(一)
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址