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()
posted @ 2022-08-19 10:07  小澳子  阅读(503)  评论(1编辑  收藏  举报