Tay*_*pez 6 python syntax list-comprehension
比方说,我想创建的列表ints,它由数字1至10立方体使用Python 只有当立方体是由四个整除.
我写了这个工作线:
cube4 = [x ** 3 for x in range(1, 11) if (x ** 3) % 4 == 0]
Run Code Online (Sandbox Code Playgroud)
我对这行代码的看法是,它计算x的立方体两次.是否有更多pythonic方式来写这条线?或者这是否与列表理解一样好?
编辑 -我的问题旨在集中在如何使用Python的功能和细微差别避免无关的计算,同时仍然保持代码简洁和可读.虽然可能已经找到了解决其他问题的解决方案,但我想确保我知道这个问题的最佳答案,而不仅仅是一个有效的解决方案.
Mar*_*ers 16
您可以使用生成器表达式:
cubed = (x ** 3 for x in range(1, 11))
cube4 = [c for c in cubed if c % 4 == 0]
Run Code Online (Sandbox Code Playgroud)
这仍然range()只迭代一次,但现在x ** 3表达式只计算一次,因为生成器表达式被迭代.您可以将它组合成一行:
cube4 = [c for c in (x ** 3 for x in range(1, 11)) if c % 4 == 0]
Run Code Online (Sandbox Code Playgroud)
但将发电机表达保持在一个单独的线上可能有助于理解(没有双关语意).
演示:
>>> [c for c in (x ** 3 for x in range(1, 11)) if c % 4 == 0]
[8, 64, 216, 512, 1000]
Run Code Online (Sandbox Code Playgroud)
当然,从数学上讲,对于你可以使用的简单例子[x ** 3 for x in range(2, 11, 2)],但我怀疑这不是你问题的目的.:-)
| 归档时间: |
|
| 查看次数: |
402 次 |
| 最近记录: |