带有嵌套列表的列表理解(Python 3)中的条件语句:

问题描述:

elements = ['121', '9', '55', '5'] 

我试图检查元素列表中的任何项目是否是回文编号。如果存在,返回True(否则为False)。 我尝试用地图+拉姆达实现:这里是片段,带有嵌套列表的列表理解(Python 3)中的条件语句:

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

具体什么是错的,你做了什么? –

你仍然必须使用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并使用一个子字符串作为反向:我们可能会决定将xx[::-1]进行比较,但由于我们的字符串只有一半的长度,因此比较时间会缩短。

此外,您最好使用//进行整数除法:它会放置结果。

,使用any没有列表解析会通常更快这样说:通过使用列表理解你强迫的Python先评估所有元素,并检查是否这些都是回文。然后你要检查是否有人。通过使用一个生成器,Python将从发现单个回文的那一刻起停止,而不是查看其他元素是否是回文。

+0

谢谢。这对Willem非常有帮助:) –

你可以试试这个太来检查列表中的号码是否是回文与否
这包括功能和迭代。

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] 
+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 

这应该帮助。

+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)