相邻列表:尝试使用while循环改进此脚本

时间:2018-12-12 19:26:42

标签: python python-3.x

因此,我正在尝试改进此脚本,如果相邻项目相等,它将返回布尔值。

from typing import List, Dict, TextIO, Tuple
def adjacent_match(L: List[str]) -> bool:
"""Return True iff two adjacent items in L are equal.

>>> adjacent_match(['A', 'B', 'B'])
True
>>> adjacent_match(['A', 'B', 'A'])
False
"""

result = False

for index in range(len(L)):
    if len(L) == 0:
        return result
    elif index == 0:
        result = L[index] == L[index + 1]
    elif 0 < index < (len(L) - 1):
        result = (L[index] == L[index + 1] or L[index] == L[index - 1])
    elif index == (len(L) - 1):
        result = L[index] == L[index - 1]
    if result == True:
        return result

return result

所以我觉得可以使用while循环来改进此脚本,但对我而言不起作用,我的目标是在不使用模块的情况下缩短它,有什么建议吗?

3 个答案:

答案 0 :(得分:0)

您可以使用zip(内置的,不需要导入)来检查邻接条件:

def adjacent_match(L):
    for x, y in zip(L, L[1:]):
        if x == y:
            return True
    return False

示例运行

>>> adjacent_match(['A', 'B', 'B'])
True
>>> adjacent_match(['A', 'B', 'A'])
False

答案 1 :(得分:0)

使用enumerate()遍历列表中的项目,并跟踪项目在列表中的位置。

对于第二个和后续位置中的每个项目,请将其与上一个项目进行比较。

def adjacent_match(L):
    for position, item in enumerate(L):
        if position == 0:
            continue
        if item == L[position-1]:
            return True

    return False

答案 2 :(得分:0)

只需遍历输入数组中的每个元素(使用索引),但最后一个避免索引错误,然后将其与下一个元素进行比较:

def adjacent_match(arr):
    for i in range(len(arr) - 1):
      if arr[i] == arr[i + 1]:
        return True
    return False