操纵两个列表

2024-09-30 05:26:47 发布

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

我试图编写这样的代码,如果n[i+1]不等于n[i],那么xmove就是m[i+1] - m[i],否则,如果n[i+1]等于n[i],那么该索引处的xmove就是0,而这一直持续到n[i+1]不等于n[i,那么此时的xmove就是第一个^和最后一个m之间的差异当相等条件存在时索引。这同样适用于ymove。输出如下

xmove = [1, 1, 0, 0, 2, 1]

ymove = [1, 1, 0, 0, 5, 1]

谢谢

m = [1, 2, 3, 4, 5, 6, 7]

n = [1, 2, 3, 3, 3, 8, 9]

xmove = []

ymove = []

first = []

Sum = []

for i in range(len(n)-1):

    if n[i+1] == n[1]:
        messi = 0
        xmove.append(messi)
        first.append(n[i])
        Sum.append(1)
        liit = sum(Sum)
        u = first[0] - liit
        xmove.append(u)
    else:
        u = n[i+1] - n[i]
        xmove.append(u)

Tags: 代码inforlenifrange差异条件
1条回答
网友
1楼 · 发布于 2024-09-30 05:26:47

感谢您在评论中的澄清,以下内容如何:

m = [1, 2, 3, 4, 5, 6, 7]
n = [1, 2, 3, 3, 3, 8, 9]

ind = range(len(n))

xeq = set()
yeq = set()

xmove = []
ymove = []
for (i,j) in zip(ind[:-1], ind[1:]):
    # Handle xmove (based on n)                         
    if n[i] != n[j]:
        if not xeq:
            xe = m[j] - m[i]
        else:
            xe = m[max(xeq)] - m[min(xeq)]
            xeq.clear()
    else:
        xe = 0
        xeq.update([i,j])
    xmove.append(xe)

    # Handle ymove (based on m)                         
    if m[i] != m[j]:
        if not yeq:
            ye = n[j] - n[i]
        else:
            ye = n[max(yeq)] - n[min(yeq)]
            yeq.clear()
    else:
        ye = 0
        yeq.update([i,j])
    ymove.append(ye)



print xmove, xmove == [1, 1, 0, 0, 2, 1]
print ymove, ymove == [1, 1, 0, 0, 5, 1]

输出:

[1, 1, 0, 0, 2, 1] True
[1, 1, 0, 0, 5, 1] True

或使用函数:

def get_moves(a, b):
    ind = range(len(a))
    eq = set()
    moves = []
    for (i,j) in zip(ind[:-1], ind[1:]):
        if b[i] != b[j]:
            e = a[j] - a[i] if not eq else a[max(eq)] - a[min(eq)]
            eq.clear()
        else:
            e = 0
            eq.update([i,j])
        moves.append(e)
    return moves

m = [1, 2, 3, 4, 5, 6, 7]
n = [1, 2, 3, 3, 3, 8, 9]

xmove = get_moves(m,n)
ymove = get_moves(n,m)

print xmove, xmove == [1, 1, 0, 0, 2, 1]
print ymove, ymove == [1, 1, 0, 0, 5, 1]

输出:

[1, 1, 0, 0, 2, 1] True
[1, 1, 0, 0, 5, 1] True

相关问题 更多 >

    热门问题