需要帮助来完成任务.我应该将偶数相加的偶数相加,例如我有一个像[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
Run Code Online (Sandbox Code Playgroud)
不要使用循环来检查重复项.相反,sum将它们放入一个数字后的数字set.
>>> lst = [1, 3, 2, 2, 4]
>>> sum(x for x in set(lst) if x % 2 == 0)
6
Run Code Online (Sandbox Code Playgroud)
如果您只想过滤掉连续相等的数字,则可以"折叠"这些范围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
Run Code Online (Sandbox Code Playgroud)
如果列表中的所有数字都相同,则它应该只加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
Run Code Online (Sandbox Code Playgroud)
该表达式的第一部分与上面相同,第二部分是三元组,根据集合的大小返回因子1或2.