带有嵌套列表的列表理解(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)]))
你仍然必须使用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将从发现单个回文的那一刻起停止,而不是查看其他元素是否是回文。
谢谢。这对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]
请为您的代码提供一些上下文和解释。单单一个代码片段并不能很好地解释*为什么*你的答案有效。 –
我实现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
这应该帮助。
非常有帮助,谢谢:) –
在你的代码行:
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)
)
具体什么是错的,你做了什么? –