首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算2D列表中每一行的元素数

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

Stack Overflow用户
提问于 2013-09-21 17:02:48
回答 2查看 4.8K关注 0票数 2

我有一个2D列表(可以根据文件大小变化),如下所示:

代码语言:javascript
复制
 partition2d =  [['A', '1', '5'],
                 ['B', '2', '3', '4'],
                 ['C', '6', '7', '8', '9']]

我还有一份清单如下:

代码语言:javascript
复制
  guest_list = [0.5, 0.0, 1.0]

我想数数字整数(除了第一列有像'A',‘B’这样的字符)在partition2d的每一行中,并将此计数除以partition2d中的整数总数。就在这里

代码语言:javascript
复制
count['1','5'] = 2. And count[ total integers in partition2d] = 9. 

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

新的清单如下:

代码语言:javascript
复制
  new_list = [ 0.1111, 0, .4444]   

这是由[ 2/9 * guest_list,3/9 * guest_list1,4/9 * guest_list2 ]完成的。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-21 17:14:22

代码语言:javascript
复制
partition2d =  [['A', '1', '5'],
                ['B', '2', '3', '4'],
                ['C', '6', '7', '8', '9']]

guest_list = [0.5, 0.0, 1.0]

如果partition2d的列表总是形式字母、数字、数字,那么.

代码语言:javascript
复制
numbers = [len(part)-1 for part in partition2d]

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

否则

代码语言:javascript
复制
numbers = [sum(v.isnumeric() for v in part) for part in partition2d]

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

更彻底

代码语言:javascript
复制
total_numbers = sum(numbers)

total_numbers
#>>> 9

然后你可以把它乘以

代码语言:javascript
复制
[n/total_numbers * factor for n, factor in zip(numbers, guest_list)]
#>>> [0.1111111111111111, 0.0, 0.4444444444444444]

如果使用Python2,则使用v.isdigit()并将total_numbers转换为浮点数。

票数 1
EN

Stack Overflow用户

发布于 2013-09-21 17:11:31

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

代码语言:javascript
复制
total_numbers = sum(map(len, partition2d)) - len(partition2d)

也就是说,求和所有行的长度并减去行数。

然后你就能得到你想要的结果

代码语言:javascript
复制
result = [guest * (len(row) - 1.0) / total_numbers
          for guest, row in zip(guest_list, partition2d)]

zip用于从guest_list获取带有一个元素(guest)的对,从partition2d获取一个row。然后计算结果。

请注意,1.0存在(而不是简单的1),以确保以浮点数进行除法,因为在Python2.x中使用guest_list包含整数会给出令人惊讶的结果(这已经在Python3.x中得到了修正,但在Python2.x中,默认情况下,3/4会给出0作为结果)。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18935240

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档