【发布时间】:2018-08-01 09:25:52
【问题描述】:
我的脚本正在进行中:
def plotRegression(data):
'''read labdata.txt and plot
x,y coordinates using formula'''
import turtle
wn = turtle.Screen()
t = turtle.Turtle()
t.speed()
#set up variables
x_list = [i[0] for i in data]
y_list = [i[1] for i in data]
#formula goes here
#set window size here
with open("labdata.txt") as f:
#coords = [map(int, line.split()) for line in f]
coords = list(map(int, line.split()) for line in f)
plotRegression(coords)
labdata.txt 示例:
44 71
79 37
78 24
运行脚本时出错:
Traceback (most recent call last):
File "plot_regression.py", line 23, in <module>
plotRegression(coords)
File "plot_regression.py", line 12, in plotRegression
x_list = [i[0] for i in data]
File "plot_regression.py", line 12, in <listcomp>
x_list = [i[0] for i in data]
TypeError: 'map' object is not subscriptable
我的这个问题的目标是从 labdata.txt 中读取数据,并将数据准备好作为整数供函数读取。我认为此时我的事情过于复杂了,但我有一些东西要学习,因此感谢您的帮助!
在 with 语句中,我注释掉了一行。我第一次在别人的代码中看到了这个 map 方法,我想试一试,因为它看起来很有用。但是,经过一些错误和研究后,看起来这是 Python 2 代码,而我使用的是 Python 3,因此存在一些差异,无法正确运行代码。
在 stackoverflow 上的搜索解释了 map 函数“返回一个生成器”,但我不确定这意味着什么。有人可以向我解释为什么我的尝试不起作用吗?
【问题讨论】:
-
它没有。它返回一个迭代器。如果您需要列表,请致电
list -
@juanpa.arrivillaga 我在上面的代码中有“coords = list(map(int, line.split()) for line in f)”,但我仍然遇到错误。我在知识的某个地方存在差距,我正在努力解决这个问题。我试过通读文档,但有很多我不明白的地方。抱歉,因为我大约一个月前才开始学习编程,一切都是那么新!
-
如果你只是在学习,那么我会避免生成器表达式/列表理解并将其与
map混合,但无论如何list(map(int, line.split()) for line in f)应该真正使用列表理解:[map(int, line.split() for line in f],你可以使用[list(map(int, line.split())) for line in f]或使用嵌套列表理解:[[int(x) for x in line.split()] for line in f]但现在,坚持使用 for 循环。 -
@juanpa.arrivillaga 看来我已经潜得太深了,无法理解。我现在会坚持使用 for 循环。谢谢!
标签: python