【发布时间】:2013-01-14 16:22:29
【问题描述】:
在 Python 中迭代整数的最佳实践是什么?我发现我需要经常这样做,通常会产生冗长的结果。例如,这是我为Project Euler问题编写的两个函数:
def is_permutation_of(n, m):
""" Return True if n is a permutation of m, else False
"""
if len(str(n)) != len(str(m)):
return False
for d in str(n):
if d not in str(m):
return False
return True
还有一个:
def has_even_digit(n):
""" Return True if n has an even digit, else False
"""
evens = ['0', '2', '4', '6', '8']
for e in evens:
if e in str(n):
return True
return False
除了冗长之外,1) 每次类型转换都必须有计算开销,以及 2) 感觉完全不雅。有没有另一种方法来处理这个问题?我是否以完全错误的方式处理这些函数,即我是否不必遍历整数?
感谢您的帮助。
【问题讨论】:
-
请注意:
is_permutation_of('aab', 'abb')将返回True。 -
@poke,感谢您的观察
-
从下面的两个 cmets 看来,您似乎在问“我可以在不将 int 转换为 str 的情况下执行这些功能吗?”您可能可以,以类似 C 的方式,但为什么呢?将 int 转换为字符串是脚本语言中很棒的习惯用法和快捷方式之一。如果你认为它更快——它可能不是。而且肯定会有更多的代码。
-
整数是不可迭代的,所以你所说的问题没有多大意义。阅读详细信息后,您实际上是在谈论迭代整数中的数字。在这种情况下,进行字符串转换是很自然的下一步。但是没有必要在你的 for 循环中一遍又一遍地这样做 - 只需在顶部添加一个
ndigits=str(n)就足够了。 -
@thewolf,这正是我要问的。从各种答案来看,这听起来像是将整数转换为字符串是 Pythonic 迭代数字的方式。谢谢。
标签: python casting type-conversion