列出了解python

时间:2016-04-27 19:49:12

标签: python list math

我很困惑我应该拿一个用户输入的文件,然后将文本文档中的分数转换成一个列表。

我遇到的问题是,当我把它变成一个列表时,它给了我一个变量下的三个单独的列表。

def main():
    file = input("Enter a filename: ")
    file1 = open(file, "r")
    Scores = (file1.readlines())
    for line in Scores:
        scores = [eval(i) for i in line.split()]

        print(scores)

我将此作为输出:

[34, 34, 54, 14, 32, 24, 31, 34, 53, 74, 22, 29]
[54, 34, 14, 14, 32, 24, 31, 34, 53, 74, 22, 29]
[66, 53, 19, 45, 39, 72, 51, 46, 64, 33, 44, 55]

我可以请求帮助把它变成一个完整的列表,这样我就可以显示有多少分数,所有分数和平均分数。

2 个答案:

答案 0 :(得分:2)

这将做你想要的:

def main():
    file = input("Enter a filename: ")
    file1 = open(file, "r")
    Scores = (file1.readlines())
    scores_list = []
    for line in Scores:
        scores_list.extend([eval(i) for i in line.split()])

    print(scores_list)

诀窍是extend现有列表,其中包含文件中每行的新列表。

请注意,此处还有其他改进机会......例如您可以使用上下文管理器来管理正确关闭文件:

 def main():
    filename = input("Enter a filename: ")
    scores_list = []
    with open(filename, "r") as file1:
        for line in file1:
            scores_list.extend([eval(i) for i in line.split()])

    print(scores_list)

最后(也可能是最重要的),您可以将eval替换为intfloat(取决于输入)并使您的程序更加安全。实际上,eval将在您的计算机上运行任何不受信任的代码。要演示,请在文本文件中添加一行exit(),并注意您的程序在任何之前退出。攻击者可以使用它来执行恶意操作(例如,如果脚本以足够高的权限运行,则擦除您的主目录甚至整个驱动器。)

答案 1 :(得分:2)

您可以将列表理解用作单向

file = input("Enter a filename: ")
with open(file, "r") as f:
    lines = f.readlines()
    scores = [int(i) for line in lines for i in line.split()]
    print(scores)