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}";
三、拼接时的常见问题
-
类型转换
- 非字符串类型(如数字、布尔值)拼接时,需手动或自动转换为字符串。
- 例:Python 中
1 + "2"
会报错,需写成str(1) + "2"
;而 Java 中1 + "2"
会自动转换为"12"
。
-
性能问题
- 频繁使用
+
拼接大量字符串时,效率较低(因每次都会创建新对象)。 - 推荐使用高效工具:Java 的
StringBuilder
、Python 的str.join()
、C# 的StringBuilder
。
- 频繁使用
-
null 值处理
- Java 中
null + "abc"
会拼接为"nullabc"
(需注意空指针问题)。 - Python 中
None + "abc"
会报错,需先判断或转换。
- Java 中
四、最佳实践
- 少量字符串:直接用
+
运算符,简洁直观。 - 大量字符串 / 循环拼接:使用语言提供的高效工具(如
StringBuilder
、join()
)。 - 包含变量的拼接:优先使用模板语法(如 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[::]
→ 省略 start
、end
- 完整形式等价于
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)
关键参数说明
-
key
(可选)- 用于指定一个函数,该函数的返回值将作为排序的依据。
- 默认值为
None
,表示直接根据列表元素本身的值排序。
示例:按字符串长度排序
python
运行
fruits = ['apple', 'banana', 'cherry', 'date'] fruits.sort(key=len) # 按字符串长度排序 print(fruits) # 输出:['date', 'apple', 'cherry', 'banana']
-
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
是排序后的结果。
常见用法示例
-
基本升序排序
python
运行
lst = [5, 2, 9, 1] lst.sort() print(lst) # [1, 2, 5, 9]
-
按自定义规则排序(结合
key
)python
运行
# 按字符串反转后的结果排序 words = ['cat', 'dog', 'apple'] words.sort(key=lambda x: x[::-1]) # x[::-1] 表示反转字符串 print(words) # ['dog', 'cat', 'apple'](反转后为 'god', 'tac', 'elppa')
-
降序排序(结合
reverse
)python
运行
names = ['Bob', 'Alice', 'Charlie'] names.sort(reverse=True) # 按字母降序 print(names) # ['Charlie', 'Bob', 'Alice']
掌握 sort()
方法的参数和特性,可以灵活处理各种列表排序需求。