用例
我正在尝试使用多个列表推导式来创建一个包含元素并满足以下条件的列表。
第 1 步:所有元素均为 1 到 30(含)之间的整数。所有元素都不能被 2 或 5 整除。打印出列表并转到下一步。
第 2 步:将所有能被 3 整除的元素转换为其相反数(例如 3 转换为 -3),并且 打印出新列表(第 2 步列表)。
第3步:将第2步列表中所有正元素的值相加并打印结果
我的代码
第 1 步:为 1 到 30 之间不能被 2 或 5 整除的所有整数创建一个列表表达式。打印出列表
list1 = [a for a in range(1, 31) if a%2 == 1 & a%5 == 1]
print(f"My initial list is: {list1}")
第 2 步:将所有能被 3 整除的整数转换为相反数
list2 = [-abs(b), c for b in list1 if b%3 == 0 else ]
print(f"My step-2 list is: {list2}")
这就是我陷入困境的地方。如何打印 list1 中的所有整数,其中任何可被 3 整除的整数都变为负数(例如,3 变为 -3),并且所有剩余的整数不能被 3 整除为积极的?这就是我想要实现的逻辑。
如果我使用下面的代码,它会返回正确的 [-3, -21] 列表。但是,我在列表中没有看到剩余的不能被 3 整除的正整数。
list2 = [-abs(b) for b in list1 if b%3 == 0]
print(f"My step-2 list is: {list2}")
第 3 步:对第二个列表中的所有正值求和并打印结果
list3 = [sum(c) for c in list2 if c > 0]
print(f"The sum of positive elements in my step-2 list is: {list3}")
我相信一旦修复了 list2 的代码,list3 的代码就应该可以工作。任何帮助表示赞赏。谢谢。
最佳答案
您可以考虑此修复和建议来实现您的目标: 对于第 3 步,列表理解可以保留正数,但需要另一个像 sum(..) 的函数,否则也许也可以使用 reduce(..) 函数:
list1 = [a for a in range(1, 31) if a%2 != 0 and a%5 != 0]
print(f"My initial list is: {list1}")
list2 = [-abs(b) if b%3==0 else b for b in list1 ]
print(f"My step-2 list is: {list2}")
list3 = [x if x>0 else 0 for x in list2 ]
print(f"My step-3 list is: {list3} and sum is: {sum(list3)}")
My initial list is: [1, 3, 7, 9, 11, 13, 17, 19, 21, 23, 27, 29]
My step-2 list is: [1, -3, 7, -9, 11, 13, 17, 19, -21, 23, -27, 29]
My step-3 list is: [1, 0, 7, 0, 11, 13, 17, 19, 0, 23, 0, 29] and sum is: 120
仅供引用,只有在需要时才可以一步完成最终求和:
list4 = [a if a%2 != 0 and a%5 != 0 and a%3!=0 else 0 for a in range(1, 31)]
print(f"One step list is: {list4} and sum is: {sum(list4)}")
One step list is: [1, 0, 0, 0, 0, 0, 7, 0, 0, 0, 11, 0, 13, 0, 0, 0, 17, 0, 19, 0, 0, 0, 23, 0, 0, 0, 0, 0, 29, 0] and sum is: 120
关于 python |列表理解|多重标准,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66522245/