【问题标题】:Use range to print [100, 1000, 10000]使用范围打印 [100, 1000, 10000]
【发布时间】:2018-12-16 13:03:25
【问题描述】:

我有这样一个清单:

for i in [100, 1000, 10000]:
    print(i)

我怎样才能用范围重现它

for i in range(100, 10000, 100)
    print(i)

上面的代码没有按预期工作。

【问题讨论】:

  • range 方法的最后一个参数是步幅。为什么你希望它像你的第一个代码示例那样工作?
  • (10 ** x for x in range(2, 5))
  • 你不见了:
  • for i in range(3): print ('100'+(i*'0')) - 因为打印整数或字符串都没有关系。

标签: python


【解决方案1】:

您正在打印 10 的递增幂,因此您可以这样做:

>>> for i in range(2, 5):
...     print(pow(10, i))
... 
100
1000
10000

编辑

正如格雷厄姆在 cmets 中观察到的,你也可以这样做

>>> for i in range(2, 5):
...     print(10 ** i)
... 
100
1000
10000

如果您更喜欢使用** 表示法进行求幂。

【讨论】:

  • 对于其他读者,还请注意,可以使用** 运算符在 python 中进行求幂。所以第二行可以改写为print(10 ** i),其中a ** b是“a的b次方”。
  • 这是一个很好的解决方案,但我更喜欢@Nils Werner 解决方案。
  • @Graham 说得好;写作时我认为pow()** 快,但显然他们perform similarly,而math.pow 更慢。
  • @snakecharmerb 它说math.pow 更快。我读错了吗?
  • @Ayxan 你说得对,这个答案说math,pow“通常更快”,但可能不太精确。感谢您的关注。
【解决方案2】:

单行:

print(*(10 ** n for n in range(2, 5)), sep='\n')

不是* 运算符,which is used to unpack the tuple** 找到 10 的幂,sep 表示放在元素 print 输出之间的字符串。

正如@Walter 在 cmets 中指出的那样,这种方法对于较大的范围并不是特别有效。在这些情况下,@snakecharmerb 的带有 for 循环的方法是推荐的选择。

【讨论】:

  • 这很好:-)
  • 这会分配整个元组,如果范围很大则不是一个好主意
  • @WalterTross 感谢您的反馈,尝试将其添加到
【解决方案3】:

有几个选项

import numpy as np
for i in np.logspace(2, 4, num = 3, endpoint = True, dtype = np.int):
    print(i)

或(根据@Graham 评论编辑)

for i in (10**k for k in range(2, 5)):
    print(i)

【讨论】:

  • 你不应该假设每个人都知道np的意思
  • 在第二种情况下,使用[] 使其成为列表绝对没有意义;对于大范围而言,它根本不是最佳的内存效率,因此是一种不好的做法。相反,您应该使用括号将其设为生成器表达式:(10**k for k in range(2, 5))
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-09-08
  • 2011-07-17
  • 2021-05-02
  • 1970-01-01
  • 1970-01-01
  • 2014-09-07
  • 2021-03-29
相关资源
最近更新 更多