向左或向右移动列表 1 列表中的字符。移动后 return 如果可能则为真,否则为假

Shifting character in list of list 1 position left or right. After shifting return true if it was possible and false if it wasn't

随机字符被指示向左或向右移动 1 个位置,如果可能并且 return 正确,如果不可能则 return 错误。

示例:

#Input:

[['.', 'B', 'B', '.', '.', '.']]

move_sideways("B", "RIGHT", lot0)

#Output:

True
[['.', '.', 'B', 'B', '.', '.']]

所以两个B都有可能向右移动一个位置。如果其中一个 B 处于第一个位置并被指示向左移动,它将 return False 因为这是不可能的。如果 B 处于最后位置并指示向右移动,则相同。

到目前为止,这是我的代码,但我真的不知道如何完成它。也许我会使用 pop

def move_sideways(symbol, direction, lst):

    for symbol in range(len(lst))
        lst[1:] + lst[:1]
            return lst

这可能不是最有效的方法,但它确实有效。我很乐意回答有关它的任何问题,但我很快就要睡觉了。

def move_sideways(symbol, direction, lst):

    if symbol not in lst:
        print('symbol is not in list')
        return False

    ind = [i for i, x in enumerate(lst) if x == symbol] #retunrs a list of the index of every symbol in list [1,2] in given example

    if direction == 'RIGHT':
        if ind[-1]+1 == len(lst):                       #check to see if the right most move will go out of the list 
            return False
        for x in ind[::-1]:
            lst.insert(x+1,lst.pop(x))                  #this will pop out every symbol and insert them back in one to the right  


    if direction == 'LEFT':
        if ind[0] == 0:                                 #checks if the left most symbol is at 0
            return False 
        for x in ind:
            lst.insert(x-1,lst.pop(x))                  #this will pop out every symbol and insert them back in one to the left

    return(True,lst)                                    #return the new list and a True in a tuplit

>>> a = [['.', 'B', 'B', '.', '.']]
>>> print(move_sideways('B', 'RIGHT', a[0]))
(True, ['.', '.', 'B', 'B', '.'])

>>> a = [['.', 'B', 'B', '.', 'B']]
>>> print(move_sideways('B', 'RIGHT', a[0]))
False