如何更有效地重写代码

2024-10-01 15:38:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我写了这个函数。输入和预期结果在docstring中显示。你知道吗

def summarize_significance(sign_list):
    """Summarizes a series of individual significance data in a list of ocurrences.

    For a group of p.e. 5 measurements and two diferent states, the input data
    has the form:

    sign_list = [[-1, 1],
                 [0, 1],
                 [0, 0],
                 [0,-1],
                 [0,-1]]

    where -1, 0, 1  indicates decrease, no change or increase respectively.
    The result is a list of 3 items lists indicating how many measurements
    decrease, do not change or increase (as list items 0,1,2 respectively) for each state:

    returns: [[1, 4, 0], [2, 1, 2]]

    """
    swaped = numpy.swapaxes(sign_list, 0, 1)

    summary = []
    for row in swaped:
        mydd = defaultdict(int)
        for item in row:
            mydd[item] += 1
        summary.append([mydd.get(-1, 0), mydd.get(0, 0), mydd.get(1, 0)])

    return summary

我想知道是否有一个更优雅,更有效的方式做同样的事情。一些想法?你知道吗


Tags: oroftheinfordatagetsummary
3条回答

这里有一个使用更少代码,可能更高效的方法,因为它只在sign\u列表中迭代一次而不调用交换,并且不构建一堆字典。你知道吗

summary = [[0,0,0] for _ in sign_list[0]]

for row in sign_list:
  for index,sign in enumerate(row):
    summary[index][sign+1] += 1
return summary

不,只是更复杂的方法。你知道吗

import itertools

def summarize_significance(sign_list):
  res = []
  for s in zip(*sign_list):
    d = dict((x[0], len(list(x[1]))) for x in itertools.groupby(sorted(s)))
    res.append([d.get(x, 0) for x in (-1, 0, 1)])
  return res

首先,您可以:

swapped = numpy.swapaxes(sign_list, 0, 1)
for row in swapped:
  mydd = {-1:0, 0:0, 1:0}
  for item in row:
     mydd[item] += 1
  summary.append([mydd[-1], mydd[0], mydd[1])
return summary

相关问题 更多 >

    热门问题