繁体   English   中英

在Python中创建带循环的列表

[英]Creating lists with loops in 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的问题,但是没有任何破坏者,而且我正在寻找关于这个特定任务的建议,而不是我的整体策略。 谢谢!

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中有self属性,以及例如函数。 即使模块或脚本将其变量存储在字典中,您也可以通过globals()访问该dict,以获取可由外部作用域接收的全局变量,或者通过locals()访问内部作用域中的变量。 由于它存储在字典中,您可以像管理它一样管理它,调用任何其他字典对象可用的方法。 所以,例如:

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()

我假设您要从文件中读取前20行 - 尝试, - 它仅用于3行,将此行扩展为20行

f  = open(r"C:\New Text Document.txt",'rb')
lst =[]
for i in f.readlines()[0:2]:
    print i
    lst.append(i.split())

print lst

输出:

[['1efu', 'ieo', 'ioew'], ['2ku', 'fa', 'foa']]

如果你想要扁平列表 -

lst.append(','.join(i.split()))

输出 -

['1efu,ieo,ioew', '2ku,fa,foa']

编辑 - 将行反馈到内容使用Dictionary

f  = open(r"C:\New Text Document.txt",'rb')
dic = {}

count = 1
for i in f.readlines()[0:2]:
    print i
    global count
    dic.update({'line%s'%count:i.split()})
    count+=1
print dic

输出 -

{'line2': ['2ku', 'fa', 'foa'], 'line1': ['1efu', 'ieo', 'ioew']}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM