计算2D列表中每行中元素的数量

时间:2013-09-21 17:02:49

标签: python list loops count

我有一个2D列表(可以是可变大小,取决于文件),如下所示:

 partition2d =  [['A', '1', '5'],
                 ['B', '2', '3', '4'],
                 ['C', '6', '7', '8', '9']]

我有另一个列表:

  guest_list = [0.5, 0.0, 1.0]

我想在partition2d的每一行中计算数字整数(除了第一列有“A”,“B”等字符),并将此计数除以partition2d中的整数总数。这将是

count['1','5'] = 2. And count[ total integers in partition2d] = 9. 

我想分开它。所以我得到2/9并将这个数字乘以guest_list的相应列(这是partition2d的第一行的结果将乘以第一列,即guest_list的0.5,并将结果存储在新列表中。

新列表将是:

  new_list = [ 0.1111, 0, .4444]   

这是由[2/9 * guest_list [0],3/9 * guest_list [1],4/9 * guest_list [2]]

完成的

我只知道我可以使用list.count计算1D列表,但我发现很难在Python中实现上述逻辑。

2 个答案:

答案 0 :(得分:3)

要获得总数(假设每行中的第一个元素是您要跳过的字母),您可以使用

total_numbers = sum(map(len, partition2d)) - len(partition2d)

即。将所有行的长度相加并减去行数。

然后您可以使用

获得您正在寻找的结果
result = [guest * (len(row) - 1.0) / total_numbers
          for guest, row in zip(guest_list, partition2d)]

zip用于与来自guest的一个元素(guest_list)和来自row的一个partition2d成对。然后计算结果。

请注意,1.0存在(而不是简单的1)以确保以浮点完成除法,因为包含整数的guest_list会在Python 2中产生令人惊讶的结果。 x(这在Python 3.x中已得到修复,但在Python 2.x中3/4默认情况下会导致0

答案 1 :(得分:1)

partition2d =  [['A', '1', '5'],
                ['B', '2', '3', '4'],
                ['C', '6', '7', '8', '9']]

guest_list = [0.5, 0.0, 1.0]

如果partition2d的列表总是[字母,数字,数字......],那么

numbers = [len(part)-1 for part in partition2d]

numbers
#>>> [2, 3, 4]

,否则

numbers = [sum(v.isnumeric() for v in part) for part in partition2d]

numbers
#>>> [2, 3, 4]

更彻底

total_numbers = sum(numbers)

total_numbers
#>>> 9

然后你可以通过

来增加它
[n/total_numbers * factor for n, factor in zip(numbers, guest_list)]
#>>> [0.1111111111111111, 0.0, 0.4444444444444444]

如果使用Python 2,请使用v.isdigit()并将total_numbers转换为浮动。