我有一个2D列表(可以根据文件大小变化),如下所示:
partition2d = [['A', '1', '5'],
['B', '2', '3', '4'],
['C', '6', '7', '8', '9']]我还有一份清单如下:
guest_list = [0.5, 0.0, 1.0]我想数数字整数(除了第一列有像'A',‘B’这样的字符)在partition2d的每一行中,并将此计数除以partition2d中的整数总数。就在这里
count['1','5'] = 2. And count[ total integers in partition2d] = 9. 我想把它分开。因此,我得到2/9,并将这个数字与guest_list的相应列相乘(即第一行partition2d的结果将与guest_list的第一列I.0.5相乘,并将结果存储在一个新列表中。
新的清单如下:
new_list = [ 0.1111, 0, .4444] 这是由[ 2/9 * guest_list,3/9 * guest_list1,4/9 * guest_list2 ]完成的。
我只知道我可以使用list.count计算1D列表,但我发现在Python中实现上述逻辑是很困难的。
发布于 2013-09-21 17:14:22
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]如果使用Python2,则使用v.isdigit()并将total_numbers转换为浮点数。
发布于 2013-09-21 17:11:31
要获得数字总数(假设每行中只有第一个元素是要跳过的字母),只需使用
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_list获取带有一个元素(guest)的对,从partition2d获取一个row。然后计算结果。
请注意,1.0存在(而不是简单的1),以确保以浮点数进行除法,因为在Python2.x中使用guest_list包含整数会给出令人惊讶的结果(这已经在Python3.x中得到了修正,但在Python2.x中,默认情况下,3/4会给出0作为结果)。
https://stackoverflow.com/questions/18935240
复制相似问题