我有这项家庭作业,似乎被困在这个问题上。
编写一个函数,该函数将名为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
答案 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]
和zip
与zip(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)
你不需要切片,你需要索引访问(作为旁注,你应该问你的老师他们是否听说过pep8
,three_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
但如果你像这样返回True
和False
,你只需返回比较结果:
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