在Python中创建带有循环的列表

2024-10-03 21:36:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图创建一个列表序列,其中包含不同的变量名,对应于文本文件的不同行。我当前的代码要求我硬编码文件中的行数:

with open('ProjectEuler11Data.txt') as numbers:
    data = numbers.readlines()
    for line in data:
        if line == 1:
            line1 = line.split()
        if line == 2:
            line2 = line.split()
        if line == 3:
            line3 = line.split()
        if line == 4:
            line4 = line.split()

在这种情况下,我将不得不继续到20,这不是很糟糕,但我想有一个更简单的方式,我不知道。 这是一个ProjectEuler问题,但没有任何破坏者,而且我正在寻找关于这个具体任务的建议,而不是我的整体策略。谢谢!你知道吗


Tags: 文件代码txt编码列表dataifwith
3条回答
with open('ProjectEuler11Data.txt') as numbers:
    data = numbers.readlines()
lines = [line.split() for line in data]

我不知道为什么你需要为每一行不同的变量名,当你可以有一个数组,所有行在最后。 现在,您可以通过第[0]行、第[1]行等简单地访问各个行。你知道吗

为什么不使用dict来更新脚本的局部变量呢?你知道吗

with open('ProjectEuler11Data.txt') as numbers:
    data = numbers.readlines()
    d = {}
    for i,line in enumerate(data):
        d["line"+str(i)] = line.split()
locals().update(d)

这样,您就可以在脚本的范围内使用lineX。 为了解释: 在python中,一切(几乎)都是一个对象,每个对象都有一个dict和定义它的变量,一个类在dict中有self属性,例如函数。即使模块或脚本的变量存储在字典中,您也可以通过globals()访问外部作用域可以访问的全局变量的dict,或者通过locals()访问内部作用域中的变量的dict。由于它存储在字典中,所以您可以像管理它一样管理它,调用任何其他字典对象可用的任何方法。例如:

locals()["myVariable"] = 5

正在创建变量myVariable,该变量在模块的作用域中存储5。你知道吗

您可以使用globals()locals()来定义范围指针名称。另外enumerate()内置函数允许您遍历集合的索引和值。知道了这一点,你可以做如下事情:

with open('ProjectEuler11Data.txt') as numbers:
    data = numbers.readlines()
    for i, line in enumerate(data):
        globals()['line%d' % i] = line.split()

相关问题 更多 >