您好,我怎样才能在list'routes函数中使用列表'trav_time'中的每个元素两次,以便每次cs循环时使用evaluate_routes函数中的两个不同的计算。它适用于fit,但会给出fit1下面的错误。谢谢
trav_time = iter([3,6,7,9,11])
value_of_time = 15
trnsfr_pen = 0.21
def evaluate_routes():
fitness = []
fitness1 = []
for cs in range(5):
fit = (trav_time.next() * (5 / trnsfr_pen) * value_of_time)
fitness.append(fit)
fit1 = trav_time.next() * 3
fitness1.append(fit1)
print "fitness: ",fitness
print
print "fitness: ",fitness1
return fitness
evaluate_routes()
Traceback (most recent call last):
File "C:/Users/AMAMIFE/Desktop/obi/hey.py", line 251, in <module>
evaluate_routes()
File "C:/Users/AMAMIFE/Desktop/obi/hey.py", line 240, in evaluate_routes
fit1 = trav_time.next() * 3
StopIteration
答案 0 :(得分:3)
你错了。此代码不适用于fit
或fit1
,这是因为您正在调用next
两次。每次调用next
时,它都会获取下一个元素。这意味着每次迭代都会获取2个不同的元素。您需要修改代码,以便每次循环迭代只获取一个元素。我会留下如何只为你取一次练习;它完全符合你的能力。试想一下。
在真实世界的代码中,您几乎从不需要直接调用next
。你通常会找到一种没有它的循环方式,比如使用循环或生成器。
最后,您发布的代码是而不是产生您遇到的错误的代码。您发布的代码会导致(OP修正了错字。)AttributeError: 'list' object has no attribute 'next'
。
答案 1 :(得分:2)
在Python中,您可以遍历列表中的每个项目,如下所示:
trav_time = [3,6,7,9,11]
value_of_time = 15
trnsfr_pen = 0.21
def evaluate_routes():
fitness = []
fitness1 = []
for item in trav_time:
fit = (item * (5 / trnsfr_pen) * value_of_time)
fitness.append(fit)
fit1 = item * 3
fitness1.append(fit1)
print "fitness: ",fitness
return fitness
evaluate_routes()
保存您必须使用不使用的值对循环进行硬编码