【问题标题】:Python- How to compare new value with previous value on for-loop?Python-如何在for循环中将新值与以前的值进行比较?
【发布时间】:2017-09-17 13:32:33
【问题描述】:

我的函数需要在字典中找到速度最快的字符。字符名称是键,值是统计元组。速度是值元组的索引6。如何将之前的最高速度与当前值进行比较以查看是否更高?一旦我获得了速度,如何获取该字符的类型(值元组中的索引 1 和 2)并将它们作为列表返回?

示例数据:

d={'spongebob':(1,'sponge','aquatic',4,5,6,70,6), 'patrick':(1,'star','fish',4,5,6,100,1)}

Patrick 的速度最高(100),他的类型是starfish。应该返回 [star,fish]

这是我当前的代码,因为我不知道如何比较以前的代码和当前代码,所以它不起作用:

def fastest_type(db):
    l=[]
    previous=0
    new=0
    make_list=[[k,v] for k,v in db.items()]
    for key,value in db.items():
        speed=value[6]
    return l_types.sort()

【问题讨论】:

  • 您在循环中将之前的值与 value[6] 进行比较。如果它小于 value[6],则将其设置为 value[6] 并将 value 保存在 new 中。然后在循环之后返回 new[1:3]。

标签: python python-3.x dictionary for-loop iteration


【解决方案1】:

如果我明白你的意思。

def fastest_type(db):
    speed = 0
    new = []
    for key,value in db.items():
       if speed < value[6]:
           speed = value[6]
           new = value[1:3]
    return list(new) # return list instead of tuple

【讨论】:

  • 这会在每个测试用例中产生以下错误:UnboundLocalError: local variable 'speed' referenced before assignment
  • @ocean.1234 抱歉出现错误。 previous = 0 应该是 speed = 0。从您的代码中复制并未能更改它。
  • 这仍然未能通过所有测试用例。该列表的类型有误。
  • @ocean.1234 错误类型是什么意思?当我测试时,它返回了一个值为 'star', 'fish' 的元组。它返回一个元组,因为输入包含元组。如果需要列表,只需将 return new 更改为 return list(new)。
  • 我的意思是像'star''fish'中的类型。例如它会返回 ('aquatic', 'sponge') 但它需要返回 ('star','fish')
【解决方案2】:

sorted 函数可以很容易地做到这一点:

代码:

from operator import itemgetter

def fastest_type(db):
    fastest = sorted(db.values(), reverse=True, key=itemgetter(6))[0]
    return fastest[1], fastest[2]

此代码按键6 排序,以相反的顺序排序,以便最大的在前,然后将fastest 设置为排序的第一个元素。然后它只是从最快的速度返回两个所需的字段。

测试代码:

d = {
    'spongebob':(1,'sponge','aquatic',4,5,6,70,6),
    'patrick':(1,'star','fish',4,5,6,100,1)
}

print(fastest_type(d))

结果:

('star', 'fish')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多