lis中的移动对象

2024-09-30 18:21:15 发布

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

我列了一张这样的单子:

mapxy = [[0 for x in range(16)] for x in range(16)]

我从另一个普通列表中添加如下对象:

for y in range(0, 16):
    for x in range(0, 16):
        mapxy[x][y] = mapList[o]

然后我想在列表中向下移动一个对象,然后在列表中左右移动第一个索引mapxy[x+1][y]

mapxy.pop(f_pos_x)
mapxy.insert(f_pos_x + 1, ["1"])
f_pos_x += 1

(这也没有像我所希望的那样起作用,它在两个列表之间结束了/在第一个列表中创建了另一个列表,而不是像我所希望的那样插入到内部列表中。)

而且在ymapxy[x][y+1]上下。你知道吗

我希望它看起来如何: 原件

 mapxy = [[" ", " ", "1"," "][" ", " ", " "," "][" ", " ", " "," "][" ", " ", " "," "]]

当我向右按时:

mapxy = [[" ", " ", " ","1"][" ", " ", " "," "][" ", " ", " "," "][" ", " ", " "," "]]

当我按下按钮:

   mapxy = [[" ", " ", " "," "][" ", " ", " ","1"][" ", " ", " "," "][" ", " ", " "," "]]

Tags: 对象inpos列表forrangepop按钮
3条回答

使用元组作为键的字典:

map = {}
for x in range(16):
    for y in range(16):
        map[x, y] = 0

实际上,您可以避免初始化并检查是否设置了元素或使用了默认值。关于这个默认值,也要考虑None。使用此命令,您可以轻松地“移动”元素:

map[1, 2] = 42
v = map.pop((1, 2))
map[3, 4] = v

mapxy是一个列表列表(显然所有“cells”都初始化为单个项mapList[o],这有点奇怪)。所以popinsert一次将删除并分别添加一个完整的列表,而不是单个项。你知道吗

你说你想“移动”一个项目,但不是什么应该取代它。如果您只想复制项目,那么它显然只是:

map[x+1][y] = map[x][y]

但是如果前面的map[x][y]必须用其他的东西填充,那么你当然也必须分配给它。与沿着y而不是沿着x移动完全相同。你知道吗

这是完整的脚本,我想你想要的。但在我粘贴它逃跑之前,有两件事值得一提。1你需要在原地交换物品。2您需要考虑超出范围的索引错误。你知道吗

首先,我设想使用deque个具有maxlen字段集的deques。deque可从collections库获得。所以要向左移动,你在右边弹出,在左边插入,向右移动,你在左边弹出,在右边附加。但后来我有了另一个主意。你知道吗

坚持使用列表列表,在适当的位置交换项并避免超出范围的错误,因为新计算的索引位于包含项的列表长度的非负整数模集内。你知道吗

别说了。在python中就地交换,给定:

x = [8, 21, 100, 9, 5]

您需要:

x[2], x[3] = x[3], x[2]

导致:

x = [8, 21, 9, 100, 5]

下面的脚本跟踪两个索引,x对应于要向左和向右移动的项的索引,字符串,y对应于包含要向左和向右移动的项的内部列表项的索引(内部列表本身是上下移动的)。我指的是位置。所以x指向字符串,y指向列表。你知道吗

要在包含列表中上下移动,只需知道要移动的列表的索引y。要左右移动项(字符串),您需要知道包含列表索引y和项索引x。你知道吗


#!/usr/bin/python

from collections import deque

def move_dowm(data, y):
    old_y = y
    y = (y + 1) % len(data)
    data[old_y], data[y] = data[y], data[old_y]
    return y

def move_up(data, y):
    old_y = y
    y = (y - 1) % len(data)
    data[old_y], data[y] = data[y], data[old_y]
    return y

def move_right(data, x, y):
    old_x = x
    x = (x + 1) % len(data[y])
    data[y][old_x], data[y][x] = data[y][x], data[y][old_x]
    return x

def move_left(data, x, y):
    old_x = x
    x = (x - 1) % len(data[y])
    data[y][old_x], data[y][x] = data[y][x], data[y][old_x]
    return x

if __name__ == '__main__':
    dataset = [
        [' ', ' ', ' ', ' '],
        ['1', ' ', ' ', ' '],
        [' ', ' ', ' ', ' '],
        [' ', ' ', ' ', ' '],
    ]
    x, y = 0, 1

    print dataset
    print '-' * 90

    y = move_up(dataset, y)
    print dataset
    print '-' * 90

    y = move_dowm(dataset, y)
    print dataset
    print '-' * 90

    x = move_left(dataset, x, y)
    print dataset
    print '-' * 90

    x = move_right(dataset, x, y)
    print dataset
    print

相关问题 更多 >