需要任务帮助。我应该将偶数相加的偶数相加,例如我有一个像[1, 3, 2, 2, 4]
这样的整数列表,输出应该是6
,如果列表中的所有数字都相同,那么它应该只加2数字,例如[2, 2, 2, 2]
它应打印出4
但我不明白如何检查循环中数字的相等性:
a = [int(x) for x in input().split()]
for i in a:
if i % 2 == 0:
summ += i
elif i == i:
continue
答案 0 :(得分:5)
不要使用循环来检查重复项。取而代之的是sum
将数字放入set
后的数字。
>>> lst = [1, 3, 2, 2, 4]
>>> sum(x for x in set(lst) if x % 2 == 0)
6
如果您只想过滤掉连续相同的数字,可以使用itertools.groupby
“折叠”这些范围:
>>> lst = [1, 3, 2, 2, 4, 2]
>>> sum(k for k, g in itertools.groupby(lst) if k % 2 == 0)
8 # last 2 after 4 is counted
如果列表中的所有数字都相同,那么它应该只合计2个数字
我仍然认为这是对任务的误解或给定示例中的错误,但如果这是真正所需的行为,您可以再次将列表转换为集合,看看集合中是否只有一个元素,在这种情况下,取总和为2。
>>> lst = [2, 2, 2, 2]
>>> sum(x for x in set(lst) if x % 2 == 0) * (2 if len(set(lst)) == 1 else 1)
4
>>> lst = [1, 3, 2, 2, 4]
>>> sum(x for x in set(lst) if x % 2 == 0) * (2 if len(set(lst)) == 1 else 1)
6
此表达式的第一部分与上面相同,第二部分是三元组,根据集合的大小返回因子1或2。
答案 1 :(得分:1)
我错过了你的这部分问题:
如果列表中的所有数字都相同,那么它应该只合计2个数字 实例[2,2,2,2]它应打印出4
为此,您只需添加if else结构,例如:
if len(set(a))==1 and not a[0]%2:
print(a[0]*2)
else:
pass
#any approach below
尝试使用amazint Python数据结构=)
在我的例子中,我创建了一组数字,以便我们只能总结唯一值。
a = [int(x) for x in input().split()]
print(sum({num for num in a if not num%2}))
if not num%2
此外,您使用更清晰的解决方案。你的答案有点改进了:
a = [int(x) for x in input().split()]
summ=0
filt_set = set()
for num in a:
if not num%2 and num not in filt_set:
filt_set.add(num)
summ+=num
print(summ)
当我们讨论搜索元素时,它使用set作为更有效的数据结构然后是列表。它还将元素同时加到元素中进行求和。
在评论讨论期间,我意识到您可能需要一个代码来仅汇总非重复数字,而不是唯一数字。我建议使用功能性Python功能:
from collections import Counter
summ = sum(map(lambda x: x[0]
,filter(lambda x:x[1]==1
,Counter(a).items())))
print(summ)
因此,对于a = [1, 3, 2, 2, 4]
,我们将获得1 + 3 + 4 = 8。
你也可以用更传统的方式实现它:
elt_set = set() # a set to keep info about elements
res_set = set() # a set that we will sum up
for e in a:
# if the element happens for the first time, add it to the res_set
if e not in elt_set:
res_set.add(e)
else if e in res_set:
# if it has been already seen before, remove it from the res_set
res_set.remove(e)
elt_set.add(e)
print(sum(res_set))
答案 2 :(得分:1)
有很多方法,这里有两种方法:
首先,使用dict,dict键可以相同,所以只需将值作为dict中的键分配,它将是唯一的:
output={j:i for i,j in enumerate(data) if j%2==0}
然后只是布尔条件:
print([sum(output),sum(list(map(lambda x:x+x,output)))][len(output)==1])
这种情况如何运作?
布尔值是int的子类,因此[len(output)== 1]产生一个整数值,但是[' false',' true']将其作为索引值。
输出:
6
如果您所说的值相同,那么在这种情况下您需要两个数字总和:
data=[2,2,2,2]
输出:
4
第二个使用集合:
data=[4,4,4,4]
def even_(data):
sum_data=[]
for i in data:
if i%2==0:
sum_data.append(i)
if len(set(sum_data)) == 1:
return list(map(lambda x: x + x, set(sum_data)))[0]
else:
return sum(set(sum_data))
print(even_(data))
输出:
6
答案 3 :(得分:0)
我要做的是:
db.exercise.aggregate([
{$match : {"tags.label" : "shoot"}},
{$sample : {size : 20}},
{$group : {_id : null, exercise : {$push : "$$ROOT"}}},
....]