Python 使用列表元素两次
您好,请问我如何使用列表“trav_time”中的每个元素两次,在每次cs循环的evaluate_routes函数中进行两次不同的计算。对于fit,它运行良好,但对于fit1,它给出了以下错误。多谢各位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 = 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
。我一直在用它。跳过文本文件中的头就是一个很好的例子。