如何返回真假?

时间:2019-10-31 21:58:20

标签: python list for-loop set

我的任务涉及创建一个算法,该算法可以判断列表是否在递增。如果列表升序,列表中没有重复项,则输出应返回True;否则,如果列表不升序或具有重复项,则输出应返回False。

我在弄清楚如何返回“ True”或“ False”时遇到了问题,而不是使用字符串将其打印出来。

输入:

def tr1(lis):

  if (len(lis)== len(set(lis)) and (sorted (lis) == lis)) :
    print ("True")
  else:
    print ("False")
tr1([1,2,3,4,4])

输出:

False

3 个答案:

答案 0 :(得分:0)

通常分配/返回布尔值,而不是这样做:

my_result = False

if condition1 and condition2:
    my_result = True
else:
   my_result = False

您可以简单地做到:

my_result = condition1 and condition2

回到创建集合的问题。

您可以从列表(或任何可迭代对象)创建set,如下所示:

your_list = [1,2,3,4]

your_set = set(your_list)

if (len(your_set)==len(your_list):
    pass #All elements are unique

集合的主要属性是它没有重复项。因此,如果列表的长度与集合的长度匹配,那么我们可以推断出列表中的所有元素都是唯一的。


您可以通过以下方法检查所有元素是否都按升序排列:首先对列表进行排序,然后对排序后的列表与原始列表相同进行匹配。如果是这种情况,那么您可以决定列表中的所有元素都按升序排列。

your_list = [1,3,2,4]

sorted_list = sorted(your_list) #[1,2,3,4]

descending_sorted_list = sorted(your_list, reverse=True) #[4,3,2,1]

if (sorted_list == your_list):
    pass #They are in ascending order

使用AND运算符将这两个条件结合在一起将同时验证这两个条件。

#This sets a boolean (True/False)
result = (sorted_list == your_list) and (len(your_set)==len(your_list))

类似地,在方法上下文中,您可以直接将其返回:

return (sorted_list == your_list) and (len(your_set)==len(your_list))

答案 1 :(得分:0)

在许多其他帖子中也处理了检测重复项的问题:从列表中设置一组并检查其长度;如果重复,则集合会更短。

打印布尔值需要对布尔数据进行思考,就像您已经学会对数字和文本数据进行思考一样。

print(sorted(lis) == list)

这就是整个案例。将它们放在一起:

print(sorted(lis) == list and len(set(lis)) == len(lis) )

答案 2 :(得分:0)

对于增加或减少测试,可以使用python lambda表达式:

减少:

is_decreasing = all(l[i] <= l[i+1] for i in range(len(l)-1))

要增加:

is_increasing = all(l[i] <= l[i+1] for i in range(len(l)-1))

is_decreasingis_increasing都是布尔值。