如何使用List理解打印特定值的模数?

时间:2016-02-22 13:33:00

标签: python python-2.7 python-3.x

我有一个清单a,

a = ['python', 'django', 'python with django']

我想做的是,

如果数字可被3整除,则打印'python'

如果数字可被5整除,则打印'django'

如果数字可以被3和5整除,则打印'python with django'

这是我的代码

for n, i in enumerate(range(20)):
    if i % 3 == 0:
        print n, a[0]
    elif i % 5 == 0:
        print n, a[1]
    elif i % 3 == 0 and i % 5 == 0:
        print n, a[2]

O / P

0 python
3 python
5 django
6 python
9 python
10 django
12 python
15 python
18 python

需要此结果

0 python with django
3 python
5 django
6 python
9 python
10 django
12 python
15 python with django
18 python

我可以使用列表理解还是有任何pythonic方式

提前致谢。

3 个答案:

答案 0 :(得分:1)

你的方式似乎很好,但你的代码有点不正确。这是正确的代码:

for n, i in enumerate(range(20)):
    if i % 3 == 0 and i % 5 == 0:
        print n, a[2]
    elif i % 3 == 0:
        print n, a[0]
    elif i % 5 == 0:
        print n, a[1]

您必须先检查数字是否可以被3和5整除。如果你没有,它可以被3整除,它符合第一个if语句的条件,所以它不会检查任何elif语句,因为elif只会被检查之前的ifelif语句未得到满足。如果数字可被5整除,则同样如此。

答案 1 :(得分:0)

在这种情况下,列表理解可能最终看起来过于复杂。只需将三个条件中的最后一个移到顶部即可。否则,如果一个数字可以除以3和5,那么单独检查可以被3整除,而elif链意味着永远不会达到组合检查。顺便说一句,您无需枚举迭代的范围,只需使用i代替n

为了使代码更简洁(但也不那么简单),你可以减少一张支票:

for i in range(20):
    if i % 3 == 0:
        if i % 5 == 0:
            print i, a[2]
        else:
            print i, a[0]
    elif i % 5 == 0 :
        print i, a[1]

答案 2 :(得分:0)

这应解决您的FizzBu​​zz任务。

a = ['python with django' if x%15 == 0 else ('python' if x%3 == 0 else 'django') for x in xrange(20)]