使用列表的元素两次

时间:2014-05-08 08:33:21

标签: python python-2.7

您好,我怎样才能在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

2 个答案:

答案 0 :(得分:3)

你错了。此代码不适用于fitfit1,这是因为您正在调用next两次。每次调用next时,它都会获取下一个元素。这意味着每次迭代都会获取2个不同的元素。您需要修改代码,以便每次循环迭代只获取一个元素。我会留下如何只为你取一次练习;它完全符合你的能力。试想一下。

在真实世界的代码中,您几乎从不需要直接调用next。你通常会找到一种没有它的循环方式,比如使用循环或生成器。

最后,您发布的代码是而不是产生您遇到的错误的代码。您发布的代码会导致AttributeError: 'list' object has no attribute 'next'(OP修正了错字。)

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

保存您必须使用不使用的值对循环进行硬编码