Python 通过组合两个列表中的值来创建第三个列表

Python 通过组合两个列表中的值来创建第三个列表,python,list,Python,List,我需要两个数组(在我下面的代码中):“donlist”是一个1到100美元之间的随机捐款金额列表,“charlist”是一个1到15之间的随机慈善数字列表。我需要使用每个慈善机构的捐款总额创建第三个数组。因此,如果charity#3在“charlist”中出现了8次,我必须从“donlist”中得到相应浮动的总和。我完全不知道如何做到这一点,在过去的2-3个小时里我一直在努力解决这个问题。有人知道怎么做吗?多谢各位 import random from array import * count

我需要两个数组(在我下面的代码中):“donlist”是一个1到100美元之间的随机捐款金额列表,“charlist”是一个1到15之间的随机慈善数字列表。我需要使用每个慈善机构的捐款总额创建第三个数组。因此,如果charity#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

使用一个
dict
,以慈善机构号码为键。您只需将捐赠添加到相应的
dict
值。如果
dict
元素尚不存在,则将其设置为零作为其初始值。 我使用的是
defaultdict
:如果键还不存在,
lambda:0
参数将保证为零值,否则您可以直接添加到它

更新脚本(进行一些其他小改动):


注意:我删除了
数组
导入,因为您在代码中只使用了
列表
s。

这似乎是一个使用该函数的好例子。它获取两个列表作为参数(在您的例子中是
donlist
charlist
),并创建这些列表的迭代器,因此您可以将
donlist
中的值添加到正确的位置进行一次迭代<代码>邮政编码示例:

对于zip中的a、b(范围(1、5)、范围(5、10)):
印刷品(a、b)
将输出

1 5
2 6
3 7
4 8
我强烈建议在创建第三个之前生成数据列表,这样您就可以

donlist=[random.uniform(1.01100.0)表示范围内(01100)]
charlist=[random.randint(1,15)表示范围(01000)]
这是从迭代器创建列表的简单语法。你可以阅读更多关于它的内容

通过这种方式,您可以保证它适用于在计算过程中未生成这些列表的情况,例如,用户输入值的情况

列表生成/输入后,您可以:

#这与列表理解相同,但适用于dict
# https://docs.python.org/3/tutorial/datastructures.html#dictionaries
结果={char:0表示范围(1,16)中的char}
对于don,zip中的char(donlist,charlist):
结果[char]+=don
最后,每个慈善机构都会在慈善列表中列出自己的捐赠价值
>>> 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})
>>>l2=[5,6,7,8]#捐赠清单 >>>拉链(l1、l2) [(1, 5), (1, 6), (3, 7), (4, 8)] >>>从集合导入defaultdict >>>d=默认dict(int) >>>对于拉链中的k,v(l1,l2): ... d[k]+=v ... >>>d defaultdict(,{1:11,3:7,4:8})
现在,您可以通过慈善编号对
d
进行索引,并获得捐赠的价值。

您可以给出一个简单的输入和预期输出示例,让事情变得非常清楚吗?哦,当然,我要补充一点,现在在Python中,数组和列表是两个不同的东西。在您的示例中,慈善只出现一次。另外,您也没有提供预期的输出。
random.uniform(1.00,100.00)
不会产生您现在拥有的整数。它们加起来不太可能精确到100美元:这意味着每一笔捐款正好是1美元,因为你在代码中循环了100次。有人能解释一下为什么这个被否决了吗?感谢投票是随机发生的。但也许有人觉得没有解释就有太多的魔力:
zip
本身并不能起作用。我明白,我正在更改此回复以添加更多信息。谢谢如果这能让你感到安慰的话,我最近得到了一个类似的有效但没有解释的答案-5。。。有些人很生气。哈哈,我的账户因为在一个我不理解的问题上得到-12而被禁了两周。我从不试图让别人帮我做家庭作业。。我真的不懂很多东西(这是我的第一个Python类)。谢谢!你知道我如何得到“总计”以给出两位小数的结果吗?或者更确切地说,我如何格式化“d”?我最初格式化了“donlist”,因为我无法格式化“d”。我刚刚尝试将代码更改为“d=round(random.uniform(1.00100.00),2)”,但totals中的一些值仍然有很长的小数。请使用字符串格式。例如,使用类似于
“{.2f}.format(123.456789)
的东西,您将得到一个字符串
“123.46”
。我使用您的defaultdict概念创建了第四个数组“totalnum”,用于计算每个慈善机构的捐赠数量。我现在要计算每个慈善机构的平均捐款额,但我不能把这两个名单分开,因为他们都有慈善机构的号码。你知道我怎么做吗?非常感谢你!那是另一个问题。好的,我会问一个新问题!谢谢你的帮助!
>>> 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})