【Python3】练习一

copy

题目 将一个列表的数据复制到另一个列表中

python 复制代码
import copy
a = [1,2,3,4,['a','b']]

b = a					# 赋值
c = a[:]				# 浅拷贝
d = copy.copy(a)		# 浅拷贝
e = copy.deepcopy(a)	# 深拷贝

a.append(5)
a[4].append('c')

print('a=',a)
print('b=',b)
print('c=',c)
print('d=',d)
print('e=',e)

什么叫浅拷贝

浅拷贝(Shallow Copy)是复制对象的一种方式,它只复制对象本身,而不复制对象中的子对象。换句话说,浅拷贝创建了一个新的对象,但这个新对象中的子对象仍然是原对象中子对象的引用。

在Python中,可以使用内建的 copy 模块中的 copy() 方法来创建浅拷贝。例如:

python 复制代码
import copy

original = [[1, 2], [3, 4]]
shallow_copy = copy.copy(original)

在这个例子中,original 是一个包含两个列表的列表。通过调用 copy.copy() 方法,我们创建了一个新的列表 shallow_copy,它包含了original中的所有元素,但它们仍然是 original 中的子对象的引用。

python 复制代码
original[0][0] = 'a'
print(shallow_copy)  # 输出:[['a', 2], [3, 4]]

可以看到,shallow_copy 中的第一个子列表也被修改了,因为它是 original 中第一个子列表的引用。

什么叫深拷贝

深拷贝(Deep Copy)是复制对象的一种方式,它不仅复制对象本身,还复制对象中的所有子对象。换句话说,深拷贝创建了一个新的对象,并且这个新对象中的所有子对象都是新创建的,而不是原对象中子对象的引用。 在Python中,可以使用内建的 copy 模块中的deepcopy()方法来创建深拷贝。例如:

python 复制代码
import copy

original = [[1, 2], [3, 4]]
deep_copy = copy.deepcopy(original)

在这个例子中,original 是一个包含两个列表的列表。通过调用copy.deepcopy()方法,我们创建了一个新的列表 deep_copy,它包含了 original 中的所有元素,并且这些元素都是新创建的,而不是 original 中的子对象的引用。

python 复制代码
original[0][0] = 'b'
print(deep_copy)  # 输出:[[1, 2], [3, 4]]

可以看到,deep_copy中的第一个子列表没有被修改,因为它是新创建的,而不是 original 中第一个子列表的引用。

九九乘法表

题目 输出 9*9 乘法口诀表

python 复制代码
# 外层循环,控制行数
for i in range(1,10):
    # 内层循环,控制每行的列数
    for j in range(1,i+1):
        # 打印乘法表
        print('%d*%d=%2ld '%(i,j,i*j),end='')
    print()

字符串格式化

字符串格式化方法:'%d*%d=%2ld '%(i,j,i*j) 使用的是旧式的字符串格式化方法,通过在字符串中使用占位符(例如%d%2ld)来指定数据应该插入的位置和格式。

占位符解释:

%d:这是一个整数占位符,用于插入整数类型的变量。在这里,%d 会被 i j 的值替换。 %2ld:这是一个长整数占位符,l 表示长整数(在Python 3中,整数没有长整短整之分,都是 int 类型),2 表示输出的最小宽度是2个字符,如果数值的字符数少于2,则前面补空格。在这里,%2ld 会被 i*j 的值替换。 变量替换:(i,j,i*j) 是一个元组,包含了三个变量 ij i*j 的值,这些值会依次替换字符串中的 %d %2ld 占位符。

输出结果:假设 i=3 j=4,那么这段代码会生成字符串 '3*4=12 ',其中 3 和 4 分别替换了前两个 %d,12 替换了 %2ld

end='' 的作用:这是 print 函数的一个参数,用于指定输出的结束字符。默认情况下,print 函数会在输出的末尾添加一个换行符。通过设置 end='',可以避免添加换行符,使得下一次的输出可以接在这一行的末尾。

用途:这种格式化方法常用于生成表格、报告等需要精确控制输出的场合。例如,在打印乘法表时,可以使用这种格式化方法来对齐各个乘积。

注意事项:

在Python 3中,%ld 和 %d 都可以用来格式化整数,因为Python 3中的整数类型是统一的,没有长整型和短整型的区别。 使用 %2ld 时,如果数值的字符数超过2,则不会截断,而是会完整显示。 这种旧式的字符串格式化方法在Python 3中仍然可以使用,但推荐使用更现代的格式化方法,如 str.format() 或 f-string(格式化字符串字面值),因为它们更直观、更强大。 综上所述,这段代码的目的是生成一个格式化的字符串,用于显示两个整数相乘的结果,并且控制输出的格式和对齐方式。

如何使用str.format()进行字符串格式化?

str.format() 是 Python 中一种现代且强大的字符串格式化方法。它允许你通过花括号 {} 作为占位符,并在format()方法中提供相应的值来替换这些占位符。这种方法比旧式的 % 操作符更加灵活和易读。

下面是 str.format() 方法的一些基本用法:

python 复制代码
# 基本用法
name = "Alice"
age = 30
formatted_string = "My name is {} and I am {} years old.".format(name, age)
print(formatted_string)
# 输出: My name is Alice and I am 30 years old.

你可以通过在花括号中指定位置来控制替换的顺序:

python 复制代码
# 指定位置
formatted_string = "First: {0}, Second: {1}".format("apple", "banana")
print(formatted_string)
# 输出: First: apple, Second: banana

你也可以使用关键字参数来提高代码的可读性:

python 复制代码
# 使用关键字参数
formatted_string = "My name is {name} and I am {age} years old.".format(name="Alice", age=30)
print(formatted_string)
# 输出: My name is Alice and I am 30 years old.

str.format() 还支持格式说明符,用于控制输出的格式,例如数字的格式、日期的格式等:

python 复制代码
# 格式说明符
number = 123.456
formatted_string = "The number is {:.2f}".format(number)
print(formatted_string)
# 输出: The number is 123.46

在这个例子中,{:.2f} 是一个格式说明符,其中 : 后面跟着格式说明。.2f 表示将数字格式化为小数点后两位的浮点数。 你还可以使用填充和对齐选项来控制字符串的输出格式:

python 复制代码
# 填充和对齐
formatted_string = "{:<10}|{:^10}|{:>10}".format("left", "center", "right")
print(formatted_string)
# 输出: left      |  center  |     right

在这个例子中,{:<10} 表示左对齐并填充到10个字符宽,{:^10} 表示居中对齐并填充到10个字符宽,{:>10} 表示右对齐并填充到10个字符宽。 你可以结合使用位置参数、关键字参数和格式说明符:

python 复制代码
# 结合使用
formatted_string = "Hello, {name:.3}. You have {notifications:03d} new messages.".format(name="Alice", notifications=5)
print(formatted_string)
# 输出: Hello, Ali. You have 005 new messages.

在这个例子中,{name:.3} 将 name 的值格式化为最多3个字符的字符串,{notifications:03d} 将 notifications 的值格式化为至少3个字符的整数,前面不足的部分用0填充。

如何使用f-string进行字符串格式化?

f-string(格式化字符串字面值)是 Python 3.6 引入的一种新的字符串格式化方法,它允许你在字符串中直接嵌入表达式,并自动计算表达式的值。f-string 是一种非常简洁和直观的字符串格式化方式,它比旧式的 % 操作符和 str.format() 方法更加简洁和易读。

下面是 f-string 的一些基本用法:

python 复制代码
# 基本用法
name = "Alice"
age = 30
formatted_string = f"My name is {name} and I am {age} years old."
print(formatted_string)

F-string 在性能上也比 str.format() 更快,因为它在运行时直接将表达式嵌入到字符串中,而不需要调用 format() 方法。

总之,str.format() 提供了一种强大且灵活的方式来格式化字符串,适用于各种复杂的格式化需求。

优化

python 复制代码
# 外层循环,控制行数
for i in range(1, 10):
    # 内层循环,控制每行的列数
    for j in range(1, i + 1):
        # 使用str.format()打印乘法表
        print("{}*{}={:2d} ".format(i, j, i * j), end='')
    print()

在这段优化后的代码中,print 函数中的字符串使用了 str.format() 方法来格式化输出。{} 是占位符,会被 format 方法中的参数依次替换。{:2d} 是一个格式说明符,表示将整数格式化为至少2位宽,如果不足2位,则在前面补空格。

这样写的好处是代码更加现代化,可读性也更高。此外,str.format() 方法比旧式的 % 格式化方法更加灵活,可以更方便地处理复杂的格式化需求。

相关推荐
该用户已不存在1 小时前
8个Docker的最佳替代方案,重塑你的开发工作流
前端·后端·docker
lizhongxuan1 小时前
groupcache 工作原理
后端
栗然1 小时前
Spring Boot 项目中使用 MyBatis 的 @SelectProvider 注解并解决 SQL 注入的问题
java·后端
倔强的石头_2 小时前
【C++指南】类和对象(九):内部类
后端
lovebugs2 小时前
Java中的OutOfMemoryError:初学者的诊断与解决指南
jvm·后端·面试
00后程序员2 小时前
iOS端网页调试 debug proxy策略:项目中的工具协同实践
后端
yeyong3 小时前
用springboot开发一个snmp采集程序,并最终生成拓扑图(三)
后端
倚栏听风雨3 小时前
IDEA 插件开发 plugin.xml 中 <depends config-file=".xml" optional="true"> 详解
后端
惜鸟4 小时前
Spring Boot项目自己封装一个分页查询工具
spring boot·后端