PYTHON实现正三角打印
需求
数据展示
以空格分隔的990个数据
最终结果实现效果
代码
发现我自己是真的喜欢暴力求解,当然昨天是因为有点晚所以只求能有个结果就行,今天来用最近学习的内容来试一下能不能实现速度上的提升。
原始版本1
代码
# 要被读取的文件的文件名
file_path = r"G:\useful_utils\YYT\val1.txt"
# 要输出文件
output_file_name = r"G:\useful_utils\YYT\val1_out.txt"
def main1():
# 读取txt文档,将每一个数字变成列表file中的一个元素
# 这里我觉的就需要改进,又是*又是切片又是split的……
with open(file_path) as f:
file = [*f.readlines()[0].split(" ")]
# 指定起始点为0
i = 0
# 如果要输出的文件不存在,则会自动创建,在这里以别名f做之后的操作
with open(output_file_name, 'a', encoding='utf-8') as f:
# while循环,每次i值+1
# 实现每次弹出i个元素。第1个while弹出1个元素,第2个while弹出2个元素……
# 利用pop依次弹出
while i <= len(file):
# 创建一个新列表,接收后续的元素
line_write = []
for it in range(i):
# 弹出列表中的第一个元素,这样就可以实现三角输出
# 但Python列表的append方法和pop方法,都是复杂度较高的方法,得优化
line_write.append(file.pop(0))
# 元素后需要一个空格
line_write.append(" ")
# 写出元素
f.writelines(line_write)
f.writelines("\n")
i += 1
效率
想死,区区990个元素,就耗费了我这么多时间……
更新
好像是因为,代码中有print(),影响了时间。后来去掉了print,即便没有改进代码,时间也大多在0.001和0.002之间跳动。
更新代码1
经过多次测试,时间总是在0.001,不会浮动到0.002
效率
代码
file_path = r"G:\useful_utils\YYT\val1.txt"
output_file_name = r"G:\useful_utils\YYT\val1_out.txt"
def main2():
with open(file_path) as f:
# 观察数据发现所有的数据是一行,直接利用readline().split(),没有找到更好的方法
file = f.readline().split()
f.close()
with open(output_file_name, "a", encoding="utf-8") as f:
# 指定两个位置
i = 0
j = 1
while i + j <= len(file):
# 不再使用append,而是只使用切片,从结果上看,确实有一点点的提升?
# 需要理解i和j的意思,两个“指针”来进行切片,依次切1,2,3,4……个数字
# 因为数据是刚刚好的,没有考虑数据异常的情况
for item in file[i:i + j]:
f.write(item)
# "\000"是空格的转义字符
f.write("\000")
f.writelines("\n")
i = i + j
j += 1
f.close()