elements = ['121', '9', '55', '5']
我正在尝试检查元素列表中的任何项目是否是回文编号。如果存在,则返回True(否则为False)。 我尝试使用map + lambda实现:这是片段,
print(any(map(lambda x: (all(map(lambda y: x[y] == x[-y-1], range(int(len(x)/2))))), elements )))
但我无法使用列表理解技术实现相同的想法。有人可以请它,建议我。这是我做的:
print(any([True if x[y] == x[-y-1] for y in (range(int(len/2)) for x in elements)]))
答案 0 :(得分:1)
你仍然需要使用all(..)
,否则你会在一个字符在一个字符串中回文时返回True:
any([all(x[y] == x[-y-1] for y in range(len(x)//2)) for x in elements])
或者您可以决定省略all(..)
,并使用切片:
any([x[:len(x)//2] == x[:len(x)//2-1:-1] for x in elements])
我们不需要停在len(x)//2
并使用子字符串反过来:我们可能决定将x
与x[::-1]
进行比较,但由于我们的字符串只有一半,所以将花费更长的时间。
此外,您最好使用//
进行整数除法:它将对结果进行处理。
在没有列表理解的情况下使用any
说通常 更快:通过使用列表理解,您强制Python首先评估所有元素并检查如果这些是一个回文。然后你要检查一个是否。通过使用生成器,Python将从它找到单个回文的那一刻开始停止,而不是查看其他元素是否是回文。
答案 1 :(得分:0)
您也可以尝试检查列表中的数字是否为回文
这包括一个函数和一个可迭代的。
def palindrome(n):
x1 = list(str(n))
x2 = x1[::-1]
if x1 == x2 :
return True
else:
return False
elements ['121','9','55', '5']
list = [palindrome(int(n)) for n in elements]
答案 2 :(得分:0)
我已经实施了lambda
个功能来定义双方:
elements = ['121', '9', '55', '5', '123']
count_to_middle = lambda x: len(x) // 2
left_side = lambda x: list(x[:count_to_middle(x)])
right_side = lambda x: list(reversed(x))[:count_to_middle(x)]
array = [left_side(var) == right_side(var) for var in elements]
print array
# >>> [True, True, True, True, False]
print all(array)
# >>> False
print any(array)
# >>> True
这应该有所帮助。
答案 3 :(得分:0)
在您的代码行中:
print(any([True if x[y] == x[-y-1] for y in (range(int(len/2)) for x in elements)]))
您使用range(int(len/2))
而未指定它(len(of_somnething)
)