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