列表操作期间是否删除了NoneType对象?

时间:2015-12-16 23:17:16

标签: python list matrix nonetype

所以我正在为2048游戏实现几个功能,并且在重要的所谓match( row ) [搜索相邻或仅由None分隔的列表项时遇到一些问题并添加它们在最左边的位置]。我的算法本身似乎运行得很好,但是当实现为辅助函数时,它遇到了一些麻烦。例如,匹配的行用作[2][4,4],而它应分别作为[None,2,None,None][2,None,2,4]输入,我可以从中查询可能的NoneType对象删除。

非常感谢在这个问题上提出的任何亮点。

这是完整的功能:

def match(row):
    copy1 = row.copy()
    score = 0
    while None in copy1: copy1.remove(None)
    i = 0
    while i < len(copy1):
        temp = copy1[i]
        if i < len(copy1)-1 and copy1[i+1] == temp:
            row[i] = temp*2
            row[row.index(temp)] = None
            score = score + temp*2
            i = i + 2
        else:
            i = i + 1
    return row

1 个答案:

答案 0 :(得分:0)

这是同一功能的替代实现。如果您不重复使用row变量并为trimmednew_row使用单独的索引,则会变得更加清晰。

def match(row):
    trimmed = list(filter(None, row))
    new_row = [None] * 4
    score = 0
    i = 0
    j = 0
    while i < len(trimmed):
        temp = trimmed[i]
        if i + 1 < len(trimmed) and trimmed[i + 1] == temp:
            new_row[j] = temp * 2
            score += temp * 2
            i += 1
        else:
            new_row[j] = temp
        i += 1
        j += 1
    return new_row