如果两个值之间存在相同的值,则用wrapparound替换所有值

2024-03-28 12:31:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图替换两个相同值之间的所有值,使用wrapparound。既然这很冗长,我想做的是:

我有这个数组(只有3个不同的值):

  • w-白色
  • o-橙色
  • y-黄色。你知道吗

如果一个白色介于两个相同颜色之间,就把它涂成那个颜色。你知道吗

[w, o, w, w, y, y, o, w, o, y, o, w]

进行替换后,将显示如下:

[o, o, w, w, y, y, o, o, o, y, o, o]

以下是我到目前为止得到的(n是数组的长度):

def initialPaint():
    for i in range(0, n):
        curr = arr[i]
        mid = arr[(i + 1) % n]
        last = arr[(i + 2) % n]

        if mid == "w" and curr == last:
            arr[(i + 1) % n] = curr

因为%n的原因,我认为这个环绕是有效的第二部分问题是如果有一部分像:[。。。o、 它不会把那两个白色漆成橙色。你知道吗

提前谢谢。让我知道如果有更多的澄清需要。你知道吗


Tags: infor颜色def数组橙色lastarr
2条回答

一种可能的解决方案是在两个边界上扩展列表并在扩展列表上迭代:

lst = ['w', 'o', 'w', 'w', 'y', 'y', 'o', 'w', 'o', 'y', 'o', 'w']

def paint(lst):
    if len(lst) < 2:
        return lst
    new_lst = [lst[1]] + lst + [lst[-2]]
    return [v1 if v1==v3 and v2=='w' else v2 for v1, v2, v3 in zip(new_lst, new_lst[1:], new_lst[2:])]

print( paint(lst) )

印刷品:

['o', 'o', 'w', 'w', 'y', 'y', 'o', 'o', 'o', 'y', 'o', 'o']

可能的解决办法之一是

inp=['w', 'o', 'w', 'w', 'y', 'y', 'o', 'w', 'w', 'o', 'y', 'o', 'w']
d=dict()
#store indices in dictionary
for i in range(len(inp)):
    if inp[i]!='w':
        if d.get(inp[i])!=None:
            d[inp[i]].append(i)
        else:
            d[inp[i]]=[i]
# for 'w' in mid
for each in d:
    l=d[each]
    if len(l)>1:
        for i in range(len(l)-1):
            flag=0
            for j in range(l[i]+1,l[i+1]):
                flag=0
                if inp[j]=='w':
                    flag=1
                else:
                    flag=0
                    break

        if flag==1:
            for j in range(l[i]+1,l[i+1]):
                inp[j]=each
#for 'w' at beginning
for i in range(len(inp)):
    if inp[i]!='w':
        for j in range(i):
            inp[j]=inp[i]
        break
#for 'w at end'
for i in range(len(inp)-1,-1,-1):
    if inp[i]!='w':

        for j in range(i+1,len(inp)):
            inp[j]=inp[i]
        break
print(inp)

相关问题 更多 >