将列表中的两个元素配对并创建条件语句以查看这些元素是否彼此相等

时间:2016-10-01 20:59:26

标签: python python-3.x list

我有这项家庭作业,似乎被困在这个问题上。

  

编写一个函数,该函数将名为aList的列表作为参数。如果列表包含三对整数,则返回布尔值True,否则返回False。

示例:

>>>threePairs([5, 6, 3, 2, 1, 4])
False

>>>threePairs([1, 1, 2, 2, 2, 2])
True

我尝试过使用索引,但我真的不知道如何切片,所以我不知道如何在条件中使这些对彼此相等,所以它是真的。

这是我之前删除它并再试一次。

def threePairs(aList):
    if [0] == [1] and [2] == [3] and [4] == [5]:
        return True
    else:
        return False

4 个答案:

答案 0 :(得分:2)

您可以zip切片列表,其前面有一个位置,步数等于2以获取相邻元素。然后根据您需要的条件将其提供给all

def threePairs(l):
    return all(i == j for i,j in zip(l[::2], l[1::2])) 

zip只从每个提供的迭代中获取一个元素,并将其作为元组返回,直到其中一个序列耗尽为止。

因此,例如,如果l = [5, 6, 3, 2, 1, 4]zipzip(l[::2], l[1::2])一起使用,您就拥有:

# l[::2] = [5, 3, 1]
# l[1::2] = [6, 2, 4]
print(list(zip(l[::2], l[1::2])))
[(5, 6), (3, 2), (1, 4)] 

答案 1 :(得分:2)

如何制作Counter()并检查有多少"对"你有:

In [1]: from collections import Counter

In [2]: def has_pairs(l, n):
            return sum(value / 2 for value in Counter(l).values() 
                       if value % 2 == 0) == n 

In [3]: has_pairs([5, 6, 3, 2, 1, 4], 3)
Out[3]: False

In [4]: has_pairs([1, 1, 2, 2, 2, 2], 3)
Out[4]: True

适用于任何长度和任何输入数量的对列表。

不是使用sum()来计算所有对,而是可以一次在计数器上迭代一个值,如果对的数量达到或超过输入,则可以提前退出对数。

答案 2 :(得分:1)

你不需要切片,你需要索引访问(作为旁注,你应该问你的老师他们是否听说过pep8three_pairs(mylist)会是好多了):

def threePairs(aList):
    if aList[0] == aList[1] and aList[2] == aList[3] and aList[4] == aList[5]:
        return True
    else:
        return False

但如果你像这样返回TrueFalse,你只需返回比较结果:

def threePairs(aList):
    return aList[0] == aList[1] and aList[2] == aList[3] and aList[4] == aList[5]

虽然正如其他答案所暗示的那样 - 你的例子没有明确定义。如果你有以下内容怎么办?

>>> threePairs([1, 2, 3, 1, 2, 3])

应该返回True还是False

答案 3 :(得分:-1)

def threepairs(aList):
    counter = 0
    for element in aList:
        if counter >= 3:
            return True
        if element % 2 == 0:
            counter += 1
    return False