【问题标题】:Python - find the ratios in a list of arraysPython - 在数组列表中查找比率
【发布时间】:2015-07-17 14:10:27
【问题描述】:

我有一个数据结构

my_list = [ [a, b], [c,d], [e,f], [g,h], [i, j], [k, l] ....]

字母是浮动的。

我需要找到 c,e 和 a 的比值 >>>> c/a...e/a 然后求 d,f 和 b 的比值 >>>> d/b, f/b 并为列表中的所有元素 12 元素继续此操作。因此计算了 8 个比率。

由于我们在列表元素之间移动,是否有一个函数可以有效地做到这一点?无需先单独提取数组中的数据,然后再进行数学运算。

【问题讨论】:

  • 只是指出:不要使用保留字作为变量 (list) 并以括号 [] 而不是 {} 列出开始和结束。字典由大括号 {} 分隔。
  • @Vlad 我打算将每个数组中的第一个组件和第二个组件拉出到列表中,然后遍历它们。它变得冗长且效率低下,因为我仍然必须以 3 个块为单位进行迭代并进行计算
  • @cc6g11 列表中只有 12 个元素,不会花那么长时间。
  • @Christian 我已将列表中的数组声明为 array = numpy.array([initialGAMMA, initialBETA])...导致单独迭代它们时出现问题。

标签: python arrays list nested


【解决方案1】:
ex_array = [[5.0, 2.5], [10.0, 5.0], [20.0, 13.0]]  # makes    ndarray, which makes division easier

for i in xrange(len(ex_array)):
    print "\n"  + str(ex_array[i][0]) + " ratios for x values:\n"
    for j in xrange(len(ex_array)):
        print str(ex_array[i][0] / ex_array[j][0]) + "\t|{} / {}".format(ex_array[i][0], ex_array[j][0])  # gives ratios for each nested 0 index values against the others

for i in xrange(len(ex_array)):
    print "\n"  + str(ex_array[i][1]) + " ratios for x values:\n"
    for j in xrange(len(ex_array)):
        print str(ex_array[i][1] / ex_array[j][1]) + "\t|{} / {}".format(ex_array[i][1], ex_array[j][1])   # gives ratios for each nested 1 index values against the others

输出格式如下:

【讨论】:

    【解决方案2】:

    无论如何都必须指定所需的操作。

    def get(l):
        return [l[i+k+1][j]/float(l[i][j]) for i in range(0, len(l)-2, 3) for j in range(2) for k in range(2)]
    
    print get([[1, 2], [3, 4], [5, 6], [7, 8], [9, 10], [11, 12]])
    

    【讨论】:

      【解决方案3】:

      使用列表推导,

      # sample list
      a = [ [1.0, 2.0], [4.0, 8.0], [3.0, 9.0] ]
      
      print('List:', a, '\n\nMatching:')
      
      # divides each element to other elements besides itself
      xs = [ x[0] / x1[0] for x1 in a for x in a if x[0] != x1[0] ]
      ys = [ y[1] / y1[1] for y1 in a for y in a if y[1] != y1[1] ]
      
      print("Quo of x's:", xs)
      print("Quo of y's:", ys)
      

      输出到

      List: [[1.0, 2.0], [4.0, 8.0], [3.0, 9.0]] 
      
      Matching:
      Quo of x's: [4.0, 3.0, 0.25, 0.75, 0.3333333333333333, 1.3333333333333333]
      Quo of y's: [4.0, 4.5, 0.25, 1.125, 0.2222222222222222, 0.8888888888888888]
      

      【讨论】:

        【解决方案4】:

        或者您可以使用difflib(自 Python 2.1 以来内置于 stdlib)获得一些乐趣:

        In [1]: from difflib import SequenceMatcher 
        In [2]: SequenceMatcher(None, (5,6), (6,)).ratio()
        Out[2]: 0.6666666666666666
        

        【讨论】:

          猜你喜欢
          • 2017-03-26
          • 2017-12-23
          • 1970-01-01
          • 1970-01-01
          • 2013-07-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-08-03
          相关资源
          最近更新 更多