[英]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.