我有如下python列表:
DEMO_LIST = [
[{'unweighted_criket_data': [-46.14554728131345, 2.997789122813151, -23.66171024766996]},
{'weighted_criket_index_input': [-6.275794430258629, 0.4076993207025885, -3.2179925936831144]},
{'manual_weighted_cricket_data': [-11.536386820328362, 0.7494472807032877, -5.91542756191749]},
{'average_weighted_cricket_data': [-8.906090625293496, 0.5785733007029381, -4.566710077800302]}],
[{'unweighted_football_data': [-7.586729834820534, 3.9521665714843675, 5.702038461085529]},
{'weighted_football_data': [-3.512655913521907, 1.8298531225972623, 2.6400438074826]},
{'manual_weighted_football_data': [-1.8966824587051334, 0.9880416428710919, 1.4255096152713822]},
{'average_weighted_football_data': [-2.70466918611352, 1.4089473827341772, 2.0327767113769912]}],
[{'unweighted_rugby_data': [199.99999999999915, 53.91020408163265, -199.9999999999995]},
{'weighted_rugby_data': [3.3999999999999857, 0.9164734693877551, -3.3999999999999915]},
{'manual_rugby_data': [49.99999999999979, 13.477551020408162, -49.99999999999987]},
{'average_weighted_rugby_data': [26.699999999999886, 7.197012244897959, -26.699999999999932]}],
[{'unweighted_swimming_data': [2.1979283454982053, 14.079951031527246, -2.7585499298828777]},
{'weighted_swimming_data': [0.8462024130168091, 5.42078114713799, -1.062041723004908]},
{'manual_weighted_swimming_data': [0.5494820863745513, 3.5199877578818115, -0.6896374824707194]},
{'average_weighted_swimming_data': [0.6978422496956802, 4.470384452509901, -0.8758396027378137]}]]
我想操作列表项并做一些基本的数学运算,比如获取每个数据类型列表(例如获取未加权数据的所有第一个元素并进行求和等)
目前我是这样做的this。在
当前的解决方案是一个非常基本的解决方案,我想这样做,如果列表长度增长,它可以自动计算结果。现在有四个列表,可以是5或8,最终结果应该是所有未加权值的第一个元素的总和,例如:
^{pr2}$你知道我怎么做吗?在
(对于初学者的问题很抱歉)
在Python中,每当你开始计算iterable(一个字符串、一个列表、一个集合、这些元素的集合)中有多少个,以便循环遍历它——这表明你的代码可以修改。在
东西可以为3件东西工作,也可以为300、3000和300万件同样的事情工作,而不需要更改代码。在
在您的例子中,您的逻辑是-“对于
X
内的每一个DEMO_LIST
,做一些“翻译成Python是:
此代码段将遍历任何大小的
DEMO_LIST
,并且每次i
是DEMO_LIST
中的每一个。在您的例子中,是包含您的词典的列表。在进一步扩展,你可以说:
^{pr2}${cd6>展开一个实用的例子:
^{3}$有各种各样的“捷径”来做同样的事情,但是一旦你理解了快捷方式试图做什么的“扩展”版本,你就可以欣赏这些快捷方式了。在
记住,把它写出来“漫长的路”没有什么错,尤其是当你不确定做某事的最佳方式时。一旦您熟悉了逻辑,那么就可以使用诸如列表理解之类的快捷方式。在
您可以为自己实现一个特定的列表类,在append函数中使用新项的值添加摘要,或者在删除时减少这些值:
还有一个简单的用法:
^{pr2}$从替换这个开始:
有了这个:
^{pr2}$在其他地方应用类似的更改。这假设您的数据实际上是“矩形”的,也就是说每个对应的内部列表都有相同数量的值。在
更“Python”的[*]版本:
^{3}$是:
但是,您的代码存在一些问题:
values()[0]
可能会给您字典中的任何值,因为字典是无序的。也许它碰巧给了你未加权的数据,也许没有。在len(data_list)-1
范围内循环:如果你想包括所有你需要的运动0
到{range
的第二个参数,上限,是排除的。在您也许可以考虑将数据重新格式化为这样:
一旦你在每种运动的字典中有相同的键,你就可以用
values()[0]
替换['unweighted']
,这样你就总能得到正确的字典条目。一旦有了大量具有相同键的字典,就可以用一个类或一个命名元组替换它们,以定义/强制这些值必须始终存在:现在可以将
['unweighted']
替换为.unweighted
。在[*]单词“Pythonic”的正式意思是“以Python程序员的风格完成,利用任何有用的Python特性来生成最好的惯用Python代码”。在实践中,它通常意味着“我更喜欢这样,而且我是一个Python程序员,因此这是编写Python的正确方法”。如果你是Guido van Rossum,这是权威的论据;如果你不是,那就是诉诸模糊权威。在几乎所有的情况下,都可以用“good IMO”代替,而不改变句子的意思;—)
相关问题 更多 >
编程相关推荐