计算每个元素在列表中出现的次数。然后从那里做一个条件语句

时间:2016-10-02 01:32:55

标签: python list python-3.x count

编写一个函数,该函数将名为aList的列表作为参数。如果列表只包含1到6之间的每个整数,则返回一个布尔值True,否则返回False。

这是家庭作业,我认为我做对了,但它现在告诉我它是不对的。这是我的代码。

def isItAStraight(aList):
    count = 0
    for i in set(aList):
        count += 1
        return aList.count(i) == 1

出于某种原因,即使一个数字出现不止一次,它仍然是真的,我无法弄清楚为什么它不会给我假,除非第一个或最后一个数字被改变。

每个号码只能出现一次,否则就是假的。

所以喜欢[1,2,3,4,5,6] 是真的。 但是[1,2,2,3,4,5] 会是假的。

另外,我无法导入像Counter或者集合这样的东西(尽管它更容易实现它并不是分配的。)

该列表是从1到6随机生成的。

2 个答案:

答案 0 :(得分:3)

在循环中使用return,您只检查一个值。您需要检查每个值。此外,您应该循环浏览您实际需要查找的项目,而不是遍历列表中的项目。这也有助于确保列表中的项目数量正确。

def isItAStraight(aList):
    if len(aList) != 6:
        return False
    for i in range(1, 7):
        if aList.count(i) != 1:
            return False
    return True

但最简单的方法是简单地对列表进行排序,并检查它是否是您正在寻找的内容:

def isItAStraight(aList):
    return sorted(aList) == list(range(1, 7))

答案 1 :(得分:2)

您需要注意列表中的 内容。你所写的内容与下面的伪代码基本相同:

let count = 0
for every unique element in aList:
   Add 1 to count
   if count is now 1, return true.

如果aList中至少有一个元素,那么总是会返回true,因为您要为计数添加1然后立即返回。

有两种方法可以考虑:

  1. 创建一个名为flags的所有零的6元素列表。迭代aList并将flags中的相应元素设置为1。如果flags全部为1,则返回true。
  2. 对列表进行排序,然后检查前六个数字是否为1, 2, 3, 4, 5, 6