【问题标题】:What is the pythonic way to calculate argmax?计算argmax的pythonic方法是什么?
【发布时间】:2014-02-20 15:34:48
【问题描述】:

如果我有一个列表和一个函数来计算分数,我可以这样计算 argmax:

maxscore = 0; argmax = None
x = [3.49, 0.122, 293, 0.98] # Imagine a LARGE list.
for i in x:
    # Maybe there're some other func() to calculate score
    # For now just sum the digits in i.
    score = sum([int(j) for j in str(i) if j.isdigit()])
    print i, score
    if maxscore < score:
        maxscore = score
        argmax = i

还有其他方法可以实现argmax吗?这样做的pythonic方法是什么?

【问题讨论】:

    标签: python list function max argmax


    【解决方案1】:
    def score(i):
        return sum([int(j) for j in str(i) if j.isdigit()])
    
    max(x, key=score)
    

    【讨论】:

      【解决方案2】:

      如果您要为非 Unicode 字符串的大型列表执行大量操作,那么一次性设置开销可能是值得的,因此可以通过相对简单的表完成尽可能多的过程- 用 C 编写的查找和内置方法(在 CPython 中为string_translate()is):

      x = [3.49, 0.122, 293, 0.98]
      
      digits = set(range(ord('0'), ord('9')+1))
      transtable = ''.join(chr(i-ord('0')) if i in digits else chr(0)
                              for i in range(256))
      deletechars = ''.join(chr(i) for i in range(256) if i not in digits)
      
      def sum_digit_chars(i):
          return sum(bytearray(str(i).translate(transtable, deletechars)))
      
      print max(x, key=sum_digit_chars)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-05-22
        • 1970-01-01
        • 2020-11-20
        • 1970-01-01
        • 2022-12-15
        • 1970-01-01
        • 1970-01-01
        • 2015-09-11
        相关资源
        最近更新 更多