【发布时间】:2011-07-31 09:14:26
【问题描述】:
我目前正在研究 Toby Segaran 的 Programming Collective Intelligence 并尝试完成优化章节中的一些代码,特别是计数行代码。但是,我在代码中遇到了两个我不太理解的问题。 代码
def crosscount(v):
loc = dict([(people[i],(v[i*2],v[i*2+1])) for i in range(0, len(people))])
total = 0
for i in range(len(links)):
for j in range(i+1, len(links)):
(x1,y1), (x2,y2) = loc[links[i][0]],loc[links[i][1]]
(x3,y3), (x4, y4)= loc[links[j][0]],loc[links[j][1]]
den = (y4-y3)*(x2-x1)-(x4-x3)*(y2-y1)
if den == 0: continue
最初,对于定义 loc 字典的行,我在定义 v[i*2] 的地方收到错误“列表索引超出范围”,我认为这是因为 v 是生成的随机数而不是列表。
为了让它正常工作以便我可以尝试遵循逻辑,我将其更改为 v*2 以生成整数对,但在使用“不支持的操作数类型(s ) for -: 'list' 和 'list''。我尝试将 (x1, y1) 等作为列表,然后对其进行切片,但我仍然得到相同的结果,并且除非我先将值转换为字符串,否则转换为 int() 无效(这似乎非常不蟒蛇)。我将不胜感激有关如何使此代码正常工作的一些建议,以便我可以看到在计算交叉线时应该发生什么。
【问题讨论】:
-
缩进被破坏了,这段代码肯定不会像写的那样编译。此外,当我们不知道
links和people是什么数据类型时,很难回答这个问题。 -
两个范围...为什么不
for link in links?
标签: python data-mining