学习日志42 python

1 字符串拼接

字符串拼接是编程中常见的操作,不同编程语言的实现方式和特性有所不同。以下是关于字符串拼接的核心知识整理:

一、字符串拼接的基本概念

  • 定义:将两个或多个字符串连接成一个新字符串的操作。
  • 注意:大多数编程语言中,字符串是不可变对象(拼接后会创建新字符串,原字符串不变)。

二、主流编程语言的拼接方式

1. Python
  • 方式 1:+ 运算符(最常用)

    python

    运行

    a = "Hello"
    b = "World"
    c = a + " " + b  # 结果:"Hello World"
    
  • 方式 2:str.join() 方法(高效拼接多个字符串)

    python

    运行

    parts = ["Hello", " ", "World"]
    result = "".join(parts)  # 结果:"Hello World"
    
  • 方式 3:f - 字符串(Python 3.6+)(拼接变量和字符串)

    python

    运行

    name = "Alice"
    age = 30
    result = f"Name: {name}, Age: {age}"  # 结果:"Name: Alice, Age: 30"
    
2. Java
  • 方式 1:+ 运算符(自动转换其他类型为字符串)

    java

    运行

    String a = "Hello";
    int b = 123;
    String c = a + " " + b;  // 结果:"Hello 123"
    
  • 方式 2:StringBuilder/StringBuffer(高效拼接大量字符串)

    java

    运行

    StringBuilder sb = new StringBuilder();
    sb.append("Hello");
    sb.append(" ");
    sb.append("World");
    String result = sb.toString();  // 结果:"Hello World"
    
     
    • StringBuilder:非线程安全,效率高
    • StringBuffer:线程安全,效率稍低
3. JavaScript
  • 方式 1:+ 运算符

    javascript

    运行

    let a = "Hello";
    let b = "World";
    let c = a + " " + b;  // 结果:"Hello World"
    
  • 方式 2:模板字符串(${}(ES6+)

    javascript

    运行

    let name = "Bob";
    let age = 25;
    let result = `Name: ${name}, Age: ${age}`;  // 结果:"Name: Bob, Age: 25"
    
4. C#
  • 方式 1:+ 运算符

    csharp

    string a = "Hello";
    string b = "World";
    string c = a + " " + b;  // 结果:"Hello World"
    
  • 方式 2:String.Format()

    csharp

    string name = "Charlie";
    int score = 90;
    string result = string.Format("Name: {0}, Score: {1}", name, score);
    
  • 方式 3:插值字符串($(C# 6.0+)

    csharp

    string result = $"Name: {name}, Score: {score}";
    

三、拼接时的常见问题

  1. 类型转换

    • 非字符串类型(如数字、布尔值)拼接时,需手动或自动转换为字符串。
    • 例:Python 中 1 + "2" 会报错,需写成 str(1) + "2";而 Java 中 1 + "2" 会自动转换为 "12"
  2. 性能问题

    • 频繁使用 + 拼接大量字符串时,效率较低(因每次都会创建新对象)。
    • 推荐使用高效工具:Java 的 StringBuilder、Python 的 str.join()、C# 的 StringBuilder
  3. null 值处理

    • Java 中 null + "abc" 会拼接为 "nullabc"(需注意空指针问题)。
    • Python 中 None + "abc" 会报错,需先判断或转换。

四、最佳实践

  • 少量字符串:直接用 + 运算符,简洁直观。
  • 大量字符串 / 循环拼接:使用语言提供的高效工具(如 StringBuilderjoin())。
  • 包含变量的拼接:优先使用模板语法(如 Python 的 f - 字符串、JS 的模板字符串),可读性更好。

掌握不同语言的字符串拼接特性,能帮助写出更高效、易维护的代码。

2 Python切片语法x[start:end:step]

【就是一个冒号的时候,默认省了切片的哪一个部分啊?T_T b】

在 Python 切片语法 x[start:end:step] 中,当出现一个冒号时,根据位置不同,省略的部分不同,核心规则是:

1. 单冒号 x[a:b] → 省略 step

  • 完整形式等价于 x[a:b:1](默认步长为 1)
  • 表示:从索引 a 开始(包含),到索引 b 结束(不包含),按步长 1 取值

示例

python

运行

x = "abcdef"
print(x[1:4])  # 等价于 x[1:4:1],输出 'bcd'

2. 单冒号且一侧为空 x[:b] → 省略 start 和 step

  • 完整形式等价于 x[0:b:1](默认从开头开始,步长 1)
  • 表示:从序列开头(索引 0)开始,到索引 b 结束(不包含)

示例

python

运行

x = "abcdef"
print(x[:3])  # 等价于 x[0:3:1],输出 'abc'

3. 单冒号且另一侧为空 x[a:] → 省略 end 和 step

  • 完整形式等价于 x[a:len(x):1](默认到末尾结束,步长 1)
  • 表示:从索引 a 开始(包含),一直取到序列末尾

示例

python

运行

x = "abcdef"
print(x[2:])  # 等价于 x[2:6:1](因长度为6),输出 'cdef'

4. 双冒号单空 x[::] → 省略 startend

  • 完整形式等价于 x[0:len(x):1]
  • 表示:取整个序列(和原序列相同)

示例

python

运行

x = "abcdef"
print(x[::])  # 输出 'abcdef'(和原字符串一样)

总结:单冒号的省略逻辑

  • 单冒号 : 主要省略的是 step(步长),默认步长为 1
  • 冒号某一侧为空时,额外省略该侧的边界(start 或 end),默认取到头 / 尾

切片的核心是「缺省值」规则:

start 缺省为 0,end 缺省为序列长度,step 缺省为 1。

记住这个规则,就能理解所有省略写法的含义了。

3 列表的 sort() 方法

在 Python 中,列表的 sort() 方法用于对列表进行原地排序(直接修改原列表,不返回新列表)。其基本语法和常用参数如下:

基本语法

python

运行

列表名.sort(key=None, reverse=False)

关键参数说明

  1. key(可选)

    • 用于指定一个函数,该函数的返回值将作为排序的依据。
    • 默认值为 None,表示直接根据列表元素本身的值排序。

    示例:按字符串长度排序

    python

    运行

    fruits = ['apple', 'banana', 'cherry', 'date']
    fruits.sort(key=len)  # 按字符串长度排序
    print(fruits)  # 输出:['date', 'apple', 'cherry', 'banana']
    
  2. reverse(可选)

    • 布尔值,用于指定排序方向。
    • reverse=False(默认):升序排序(从小到大)。
    • reverse=True:降序排序(从大到小)。

    示例:降序排序

    python

    运行

    nums = [3, 1, 4, 2]
    nums.sort(reverse=True)  # 降序排序
    print(nums)  # 输出:[4, 3, 2, 1]
    

重要特性

  • 原地排序sort() 会直接修改原列表,不会创建新列表,因此没有返回值(返回 None)。
    错误示例:new_list = nums.sort() → new_list 会是 None

  • 与 sorted() 区别:内置函数 sorted(列表) 会返回一个新的排序后的列表,原列表不变。
    示例:new_list = sorted(nums) → 原列表 nums 不变,new_list 是排序后的结果。

常见用法示例

  1. 基本升序排序

    python

    运行

    lst = [5, 2, 9, 1]
    lst.sort()
    print(lst)  # [1, 2, 5, 9]
    
  2. 按自定义规则排序(结合 key

    python

    运行

    # 按字符串反转后的结果排序
    words = ['cat', 'dog', 'apple']
    words.sort(key=lambda x: x[::-1])  # x[::-1] 表示反转字符串
    print(words)  # ['dog', 'cat', 'apple'](反转后为 'god', 'tac', 'elppa')
    

  3. 降序排序(结合 reverse

    python

    运行

    names = ['Bob', 'Alice', 'Charlie']
    names.sort(reverse=True)  # 按字母降序
    print(names)  # ['Charlie', 'Bob', 'Alice']
    

掌握 sort() 方法的参数和特性,可以灵活处理各种列表排序需求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值