Python 使用列表元素两次

Python 使用列表元素两次,python,python-2.7,Python,Python 2.7,您好,请问我如何使用列表“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

您好,请问我如何使用列表“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
trav_time=iter([3,6,7,9,11])
_时间的_值=15
trnsfr_pen=0.21
def evaluate_routes():
适合度=[]
适合性1=[]
对于范围(5)内的cs:
fit=(trav_time.next()*(5/trnsfr_pen)*时间的值)
fitness.append(fit)
fit1=行程时间。下一步()*3
fitness1.附加(fit1)
打印“健身:”,健身
打印
打印“适合度:”,适合度1
恢复体能
评估_路线()
回溯(最近一次呼叫最后一次):
文件“C:/Users/AMAMIFE/Desktop/obi/hey.py”,第251行,在
评估_路线()
文件“C:/Users/AMAMIFE/Desktop/obi/hey.py”,第240行,位于evaluate\u routes中
fit1=行程时间。下一步()*3
停止迭代

在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()

省去了用不使用的值对循环进行硬编码的麻烦

如果您不正确。此代码不适用于
fit
fit1
,这是因为您要调用
next
两次。每次调用
next
,它都会获取下一个元素。这意味着每次迭代要获取2个不同的元素。您需要修改代码,以便每次循环迭代只获取一个元素。我将把如何只获取一次时间留给你作为练习;这是你力所能及的。想一想

在真实的代码中,您几乎不需要直接调用
next
。您通常会找到一些不使用它的循环方式,例如使用循环或生成器


最后,您发布的代码不是产生您遇到的错误的代码。您发布的代码将导致属性错误:“列表”对象没有属性“下一步”。(OP修正了输入错误。)

请注意,
trav_time
是一个列表,但您的代码和错误消息表明它是一个生成器。@DominicKexel:关于您试图在朋友之间解决的实际问题,有什么撒谎吗?@DominicKexel我想您指的是迭代器。@jpmc26 Erm,是的,我知道:-)@Dominic kexel,我刚刚编辑了它trav_time是列表trav_time=iter([3,6,7,9,11])的迭代器,它可以工作,但不是我想要的。对于范围(5)内的cs,特别需要。Thanks@Nobi你为什么需要它?为什么要使用
next()
?这是因为这只是我正在处理的实际问题的一个片段。硬编码循环范围(5)应该表示我要在函数中使用的另一个列表。但是它有很多代码,我不知道我是否会把它们粘贴到论坛上,我是否会因为它而引起注意,你能不能也循环浏览其他列表?或者在循环中使用计数器?谢谢你的想法,这是一个打字错误,我已经编辑了它trav_time=iter([3,6,7,9,11])。那么,有没有办法两次使用该列表中的元素?Thanks@Nobi是的,有很多方法。这里有一个最简单的提示。您只能调用
next
一次。如何在不重复的情况下多次使用某个值?您如何重复使用相同的
fitness
fitness1
列表而不创建新列表,或者如何避免在代码中多次键入
0.21
?我特别避免实际为您编写代码;我想你会从自己的练习中受益更多。谢谢,我做了这个temp=trav_time.next(),然后我可以多次使用temp。谢谢你让我自己尝试解决这个问题的方法,但是有你的提示。我很感激,如果还有其他关于这一点的帮助,请删除它们。几周前我才开始用python编程,所以我仍然觉得有些事情很难。@Nobi是的,这正是我的想法。=)我们曾经都是新人,我们都发现(坦率地说,现在仍然发现)事情令人困惑。对于这个特殊的问题,我想我需要对整个问题有更多的了解,才能对如何编写代码提出真正的建议。在任何情况下,我都只能给出几条建议:始终尝试将代码分解为非常短的逻辑片段,非常努力地将事物命名得如此清晰,以至于任何白痴都能理解它们,并且永远不要盲目依赖任何过程或实践。回答得好,但是我不同意很少显式调用
next
。我一直在用它。跳过文本文件中的头就是一个很好的例子。