我必须有两个数组(在我的代码中):" donlist"是一个介于$ 1和$ 100之间的随机捐赠金额列表,以及" charlist"是1到15之间的随机慈善数字列表。我需要使用每个慈善机构的总捐款创建第三个数组。因此,如果慈善机构#3在" charlist"中出现8次,我必须从" donlist"获得相应花车的总和。我完全不知道如何做到这一点,并且一直试图弄清楚过去2-3小时。有谁知道怎么做?谢谢。
import random
from array import *
counter = 0
donlist = []
charlist = []
while counter != 100:
d = random.uniform(1.00,100.00)
c = random.randint(1,15)
counter +=1
donlist.append(d)
donlist = [round(elem,2) for elem in donlist]
charlist.append(c)
if counter == 100:
break
示例输出:
Charity Total Donations
1 802.65
2 1212.25
3 108.25
4 9324.12
5 534.98
6 6235.12
7 223.18
8 11.12
9 3345.68
10 856.68
11 7123.05
12 6125.86
13 1200.25
14 468.32
15 685.26
答案 0 :(得分:2)
使用dict
,慈善机构编号作为密钥。您只需将捐款添加到相应的dict
值即可。如果dict
元素尚未存在,请将其设置为零作为其初始值。
我使用defaultdict
:如果密钥尚未存在,则lambda: 0
参数将保证零值,否则您只需添加即可。
更新您的脚本(稍作其他一些改动):
import random
from collections import defaultdict
donlist = []
charlist = []
totals = defaultdict(float)
counter = 0
while counter != 100:
counter += 1
d = random.uniform(1.00,100.00)
c = random.randint(1,15)
donlist.append(d)
donlist = [round(elem,2) for elem in donlist]
charlist.append(c)
totals[c] += d
nb:我删除了array
导入,因为您只在代码中使用了list
。
答案 1 :(得分:1)
这似乎是使用zip函数的一个很好的例子。它获取两个列表作为参数(在您的情况下为donlist
和charlist
)并创建这些的迭代器,因此您可以迭代一次将donlist
中的值添加到正确的慈善位置。 zip
示例:
for a, b in zip(range(1, 5), range(5, 10)):
print(a, b)
将输出
1 5
2 6
3 7
4 8
我强烈建议在创建第三个数据列表之前生成数据列表,这样就可以了
donlist = [ random.uniform(1.0, 100.0) for _ in range(0, 100) ]
charlist = [ random.randint(1, 15) for _ in range(0, 100) ]
这是从迭代器创建列表的简单语法。您可以阅读更多相关信息here。
这样,您可以保证它适用于在计算过程中未生成这些列表的情况,例如,用户输入值。
列表生成/输入后,您可以:
# this is the same as a list comprehension but for a dict
# https://docs.python.org/3/tutorial/datastructures.html#dictionaries
result = { char : 0 for char in range(1, 16) }
for don, char in zip(donlist, charlist):
result[char] += don
最后,每个慈善机构N
都有result[N]
的捐赠价值。
答案 2 :(得分:0)
>>> l1 = [1,1,3,4] # charity list
>>> l2 = [5,6,7,8] # donation list
>>> zip(l1,l2)
[(1, 5), (1, 6), (3, 7), (4, 8)]
>>> from collections import defaultdict
>>> d = defaultdict(int)
>>> for k,v in zip(l1,l2):
... d[k] += v
...
>>> d
defaultdict(<type 'int'>, {1: 11, 3: 7, 4: 8})
您现在可以通过慈善机构编号索引d
并获取捐赠的价值。