具有嵌套列表的List comprehension中的条件语句(Python 3):

时间:2017-07-19 14:31:39

标签: python list lambda nested-loops palindrome

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

4 个答案:

答案 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并使用子字符串反过来:我们可能决定将xx[::-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)