一、什么是字符串拼接与重复?
- • 字符串拼接:将两个或多个字符串连接成一个新字符串。
- • 字符串重复:将一个字符串重复多次,生成一个新字符串。
Python 提供了简单直观的操作符来实现这两种操作:+ 用于拼接,* 用于重复。
# 拼接
greeting = "你好" + " " + "世界"
print(greeting) # 你好 世界
# 重复
line = "-" * 20
print(line) # --------------------
二、字符串拼接(+ 操作符)
2.1 基本拼接
使用 + 可以将多个字符串连接在一起。
first_name = "张"
last_name = "三"
full_name = first_name + last_name
print(full_name) # 张三
# 可以连续拼接多个
message = "Python" + " " + "is" + " " + "awesome"
print(message) # Python is awesome
2.2 字符串与数字不能直接拼接
age = 25
# print("年龄:" + age) # TypeError: can only concatenate str (not "int") to str
# 必须先将数字转为字符串
print("年龄:" + str(age)) # 年龄:25
2.3 使用 f-string 进行拼接(推荐)
虽然 f-string 主要用于格式化,但也可以用来拼接,且会自动处理类型转换。
name = "小明"
age = 18
message = f"姓名:{name},年龄:{age}"
print(message) # 姓名:小明,年龄:18
2.4 使用 str.join() 高效拼接多个字符串
当需要拼接多个字符串(尤其是列表中的字符串)时,join() 比循环使用 + 更高效。
words = ["Hello", "World", "Python"]
sentence = " ".join(words)
print(sentence) # Hello World Python
# 用逗号连接
tags = ["python", "编程", "教程"]
result = ",".join(tags)
print(result) # python,编程,教程
三、字符串重复(* 操作符)
3.1 基本重复
使用 * 可以将一个字符串重复指定的次数。
word = "Ha"
print(word * 3) # HaHaHa
# 常用于打印分隔线
print("-" * 40) # ----------------------------------------
3.2 重复次数为 0 或负数
- • 次数为负数时,得到空字符串(Python 3 中为负数视为 0)。
print("abc" * 0) # (空字符串)
print("abc" * -2) # (空字符串)
3.3 重复次数为浮点数
重复次数必须是整数,如果提供浮点数会引发 TypeError。
# print("abc" * 2.5) # TypeError: can't multiply sequence by non-int of type 'float'
四、拼接与重复的底层原理
- • 不可变性:字符串是不可变对象。每次使用
+ 或 * 都会创建一个新的字符串对象,原字符串不变。 - • 效率:在循环中大量使用
+ 拼接会导致性能下降(因为每次都要创建新字符串)。此时应使用列表收集字符串,最后用 join()。
# 低效方式
result = ""
for i inrange(1000):
result += str(i) # 每次循环都创建新字符串
# 高效方式
parts = []
for i inrange(1000):
parts.append(str(i))
result = "".join(parts)
五、实战案例
案例1:生成分隔线
defprint_separator(char="-", length=50):
print(char * length)
print_separator() # --------------------------------------------------
print_separator("*", 30) # ******************************
案例2:构建查询字符串
base_url = "https://api.example.com/search"
params = ["q=python", "page=1", "sort=desc"]
query_string = "&".join(params)
url = base_url + "?" + query_string
print(url) # https://api.example.com/search?q=python&page=1&sort=desc
案例3:格式化表格行
defprint_table_row(columns, widths):
row = "|".join(col.ljust(width) for col, width inzip(columns, widths))
print(row)
headers = ["姓名", "年龄", "城市"]
widths = [10, 5, 10]
print_table_row(headers, widths) # |姓名 |年龄 |城市 |
案例4:生成重复图案
defdiamond(n):
for i inrange(1, n+1):
print(" " * (n-i) + "*" * (2*i-1))
for i inrange(n-1, 0, -1):
print(" " * (n-i) + "*" * (2*i-1))
diamond(5)
案例5:字符串脱敏
id_card = "110101199001011234"
# 只显示前4位和后4位,中间用 * 代替
masked = id_card[:4] + "*" * 8 + id_card[-4:]
print(masked) # 1101********1234
六、注意事项
- 1. 类型必须一致:
+ 只能用于字符串与字符串之间,不能与数字等其他类型直接拼接。需要时用 str() 转换。 - 2. 重复次数必须是整数:
* 要求次数为整数,浮点数会报错。 - 3. 避免在循环中用
+ 大量拼接:会导致性能问题,改用 join()。 - 4. 字符串不可变:所有拼接/重复操作都会产生新字符串,原字符串不受影响。
- 5. 空字符串与 None:
None 不能直接拼接,需先转为字符串。
七、总结
掌握字符串拼接与重复,是处理文本数据的基础。合理选择方法能让代码更简洁、高效。