【问题标题】:Converting tuple to integer将元组转换为整数
【发布时间】:2012-10-09 14:08:37
【问题描述】:

我有这个 python 函数,它接受 2 个参数(string、dictionary)并返回一个浮点数。该函数旨在取分数和字符串字典中整数的平均值。

def happiness_score(string, dic):
   keys = string.lower().split()
   v = sum(dic[key] for key in keys)
   return float(v)/len(keys)

我有这个有效的测试用例:

print happiness_score("a b" , {"a":(1.2) , "b":(3.4)})
>>> 2.3

我还有一个带有元组的测试用例:

print happiness_score("a b" , {"a":(1,2) , "b":(3,4)})

如何更改我的代码,以便我可以将任何给定的元组转换为整数,以便我仍然可以运行我的程序?

【问题讨论】:

  • 将元组转换为整数是什么意思?你的意思是对元组的组件求和?您实际上是指将元组转换为浮点数(应该 (1,2) 变为 1.2)吗?
  • 您希望如何将元组(值的集合)转换为整数(严格来说是一个值)?

标签: python string dictionary tuples average


【解决方案1】:

尝试使用我的忍者读心技巧来猜测你想如何将元组转换为浮点数,也许你想要:

def tup2float(tup):
    return float('.'.join(str(x) for x in tup))

这仅适用于 2 元组...

一些结果:

>>> tup2float((1,2))
1.2
>>> tup2float((2,3))
2.3
>>> tup2float((2,30))
2.3
>>> tup2float((2,32))
2.32

【讨论】:

  • 但是如果你有零怎么办? tup2float((1, 064)) 不会产生任何类似于 1.064 的东西 :)
  • @nneonneo -- 你说得对。但我会说这是 OP 代码中的一个设计缺陷(如果这真的是 OP 想要的)。您无法编写可以处理您提到的情况的转换器,因为信息根本不存在。
【解决方案2】:

我将假设您希望本例中的答案为 (2, 3)。换句话说,您希望将元组中的每个元素都视为单独均值的来源。

def happiness_score(dic):
   scores = map(sum, zip(*d.values()))
   return [float(v)/len(dic) for v in scores]

第一步是为每个元组元素创建一组值:

d = {'a': (1, 2), 'b': (3, 4)}
zip(*d.values())
[(1, 3), (2, 4)]

然后使用 map 将 sum 应用于每个元组。

【讨论】:

    【解决方案3】:

    假设您将文件读入名为lines的列表中

    hrs, miles = zip(*[(float(line.split()[-4]), float(line.split()[-2])) for line in lines if 'miles' and 'hrs' in line])
    total_hrs = sum(hrs)
    total_miles = sum(miles)
    

    【讨论】:

      猜你喜欢
      • 2012-04-21
      • 2019-12-04
      • 2012-08-28
      • 2021-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多