【发布时间】:2018-03-28 09:24:50
【问题描述】:
首先,对不起我糟糕的英语和布局。我是中国的Python初学者,这是我用英语问的第一个问题。
问题来了:
我正在尝试使用过滤器(is_palindrome, range(1, 1000))生成像 121 这样的回文数。与这个问题密切相关的代码是is_palindrome(n) 函数中的l = [int(i) for i in str(n)]。调试器显示 当 n = 11 时,l = [] 而不是 [1, 1],然后 IndexError: list index out of range 发生在 if l[0] != l[-1]。
我想知道为什么以及如何让它成为 [1, 1]。
源代码:
def is_palindrome(n):
p = True
l = [int(i) for i in str(n)]
while len(l) != 1:
if l[0] != l[-1]:
p = False
break
l.pop(0)
l.pop(-1)
return p
print(list(filter(is_palindrome, range(1, 1000))))
附言我知道有一种更简单的方法,例如 return str(n) == str(n)[::1] 但我只想尝试另一种方法:)
【问题讨论】:
-
因为你用
l.pop(0)和l.pop(-1)...弹出了它们? -
是的,数字 11 被弹出到零长,我没有意识到。
标签: python list-comprehension palindrome